Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.75
xtorne21st
интересующийся
304 / 275 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
#1

Как узнать объём выделеной динамичесой памяти? - C++

02.01.2013, 21:22. Просмотров 2746. Ответов 16
Метки нет (Все метки)

sizeof(new_alloc) в этом случаи бесполезно так как указатель у меня всегда равен 4 байта. Можно, конечно при помощи цикла передвигать указатель на одно значение и посчитать таким образом кол. байт. Но если ли более тривиальный способ?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.01.2013, 21:22
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как узнать объём выделеной динамичесой памяти? (C++):

Как очистить массив выделеной памяти - C++
#include <iostream> #include <string.h> #include <cstdlib> using namespace std; int main() { int koltest; int...

Объём памяти доступный процессу - C++
В книге Джеффри Рихтера сказано "Каждому процессу выделяется собственное виртуальное адресное пространство. Для 32-разрядных процессов...

Как узнать размер массива в динамической памяти? - C++
Добрый вечер еще раз! Напишите пожалуйста как можно узнать истинный размер массива, находящегося в динамической памяти, созданными при...

Как узнать объем доступной памяти портабельным кодом? - C++
Доброе время суток! Вот такая задачка - именно количество свободной, а не момент, когда невозможно выделить запрошенный блок памяти. Должно...

Как узнать, в процесе отладки, сколько памяти занимает программа? - C++
Вот чтобы проследить за тем сколько и когда программа занимает и какое количество килобайт под капие переменные.... Чтобы увидеть что...

Как узнать, сколько памяти занимает тот или иной элемент программы? - C++
Товарищи, подскажите, пожалуйста, ответы на следующие вопросы: 1) Есть какие-либо средства определения, сколько памяти жрёт программа в...

16
Croessmah
Ушел
Эксперт CЭксперт С++
13558 / 7708 / 872
Регистрация: 27.09.2012
Сообщений: 18,996
Записей в блоге: 3
Завершенные тесты: 1
02.01.2013, 21:23 #2
Цитата Сообщение от xtorne21st Посмотреть сообщение
Но если ли более тривиальный способ?
"запомнить" при выделении
0
Jupiter
Каратель
Эксперт С++
6561 / 3982 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
02.01.2013, 21:23 #3
Цитата Сообщение от xtorne21st Посмотреть сообщение
Но если ли более тривиальный способ?
дополнительно хранить размер выделенной памяти
Цитата Сообщение от xtorne21st Посмотреть сообщение
Можно, конечно при помощи цикла передвигать указатель на одно значение и посчитать таким образом кол. байт
чего-чего?
0
Croessmah
Ушел
Эксперт CЭксперт С++
13558 / 7708 / 872
Регистрация: 27.09.2012
Сообщений: 18,996
Записей в блоге: 3
Завершенные тесты: 1
02.01.2013, 21:25 #4
Цитата Сообщение от xtorne21st Посмотреть сообщение
Можно, конечно при помощи цикла передвигать указатель на одно значение и посчитать таким образом кол. байт.
И выйти за пределы выделенной памяти ибо как Вы узнаете о том, что Вы находитесь в пределах выделенного блока памяти?
0
xtorne21st
интересующийся
304 / 275 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
02.01.2013, 21:42  [ТС] #5
Цитата Сообщение от Croessmah Посмотреть сообщение
И выйти за пределы выделенной памяти ибо как Вы узнаете о том, что Вы находитесь в пределах выделенного блока памяти?
Ну например если память выделялась для строки, то можно осуществить проверку на символ конца файла. Для других случаев наверно нет решения как я понял.
0
Schizorb
510 / 462 / 16
Регистрация: 07.04.2012
Сообщений: 869
Записей в блоге: 1
Завершенные тесты: 1
02.01.2013, 21:47 #6
Цитата Сообщение от xtorne21st Посмотреть сообщение
Ну например если память выделялась для строки, то можно осуществить проверку на символ конца файла.
Так что ли?

C++
1
char * str = new char[10];
И что там будет после 10-го элемента? Тем более откуда конец файла?
0
Croessmah
Ушел
Эксперт CЭксперт С++
13558 / 7708 / 872
Регистрация: 27.09.2012
Сообщений: 18,996
Записей в блоге: 3
Завершенные тесты: 1
02.01.2013, 21:47 #7
Цитата Сообщение от xtorne21st Посмотреть сообщение
Ну например если память выделялась для строки, то можно осуществить проверку на символ конца файла.
ага...
C++
1
2
char * s = new char[100500];
strcpy(s,"+100500?");
И что Вы получите?
0
xtorne21st
интересующийся
304 / 275 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
02.01.2013, 22:00  [ТС] #8
C++
1
2
3
4
int i = 0;                                                                                                  
    while (*s) // s - указатель на массив char                                                                                                  
        ++i;                                                                                                    
    // и затем результат умножить на количество байтов для char в данном случаи 1.
Добавлено через 2 минуты
Это с учётом того, что присутствует символ конца файла '\0'. А вообще очень странно, что в C++ не предусмотрена такая возможность.
0
Croessmah
Ушел
Эксперт CЭксперт С++
13558 / 7708 / 872
Регистрация: 27.09.2012
Сообщений: 18,996
Записей в блоге: 3
Завершенные тесты: 1
02.01.2013, 22:03 #9
Цитата Сообщение от xtorne21st Посмотреть сообщение
C++
1
2
3
4
int i = 0;                                                                                                  
    while (*s) // s - указатель на массив char                                                                                                  
        ++i;                                                                                                    
    // и затем результат умножить на количество байтов для char в данном случаи 1.
Во-первых, цикл бесконечный, ибо s не изменяется.
Во-вторых, в приведенном мною выше примере вы получите 8(или 9 - смотря как сделаете), а не 100500 элементов. Потому что строка "+100500?" занимает 9 элементов и '\0' будет девятым

Добавлено через 1 минуту
Цитата Сообщение от xtorne21st Посмотреть сообщение
А вообще очень странно, что в C++ не предусмотрена такая возможность.
Выделение памяти и контроль за ее использованием - головная боль программиста. В общем так и должно быть, не все же за вас делать...
0
zss
Модератор
Эксперт С++
6579 / 6141 / 2022
Регистрация: 18.12.2011
Сообщений: 16,000
Завершенные тесты: 1
02.01.2013, 22:07 #10
Какой-то странный диспут.
Вопрос-то яйца выеденного не стоит.
Операция выделения памяти возвращает указатель на выделенный блок
(тогда размер равен тому, который запросили)
или NULL (тогда размер выделенного блока равен нулю).
И ВСЕ!!!! Других вариантов нет.
0
xtorne21st
интересующийся
304 / 275 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
02.01.2013, 22:09  [ТС] #11
Цитата Сообщение от Croessmah Посмотреть сообщение
Во-первых, цикл бесконечный, ибо s не изменяется.
Забыл нарисовать два плюсика после s;

Цитата Сообщение от Croessmah Посмотреть сообщение
char * s = new char[100500]; strcpy(s,"+100500?");
При всём моём уважении, но я вообще не понимаю смысл копирования строкового литерала, когда речь идёт просто о том, чтобы посчитать выделенную память динамического пространства.

Добавлено через 1 минуту
Цитата Сообщение от zss Посмотреть сообщение
Какой-то странный диспут.
Вопрос-то яйца выеденного не стоит.
Операция выделения памяти возвращает указатель на выделенный блок
(тогда размер равен тому, который запросили)
или NULL (тогда размер выделенного блока равен нулю).
И ВСЕ!!!! Других вариантов нет.
Как я понял, что никак нельзя, этого я и хотел услышать.
0
Croessmah
Ушел
Эксперт CЭксперт С++
13558 / 7708 / 872
Регистрация: 27.09.2012
Сообщений: 18,996
Записей в блоге: 3
Завершенные тесты: 1
02.01.2013, 22:09 #12
Цитата Сообщение от xtorne21st Посмотреть сообщение
При всём моём уважении, но я вообще не понимаю смысл копирования строкового литерала, когда речь идёт просто о том, чтобы посчитать выделенную память динамического пространства.
В общем, учите тогда матчасть, если Вы совсем не поняли о чем речь
0
OhMyGodSoLong
~ Эврика! ~
1244 / 993 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
02.01.2013, 22:10 #13
Цитата Сообщение от zss Посмотреть сообщение
Какой-то странный диспут.
Вопрос-то яйца выеденного не стоит.
Операция выделения памяти возвращает указатель на выделенный блок
(тогда размер равен тому, который запросили)
или NULL (тогда размер выделенного блока равен нулю).
И ВСЕ!!!! Других вариантов нет.

Не по теме:

Вообще-то там всё сложнее. Она может 1) действительно молча возвращать NULL, 2) бросать исключение, 3) вызывать функцию-обработчик, которая должна или бросить исключение, или пристрелить программу, или найти память. По умолчанию второе.

1
zss
Модератор
Эксперт С++
6579 / 6141 / 2022
Регистрация: 18.12.2011
Сообщений: 16,000
Завершенные тесты: 1
02.01.2013, 22:15 #14
Цитата Сообщение от ~OhMyGodSoLong~ Посмотреть сообщение
Вообще-то там всё сложнее
Главное, что если память выделилась, то ее размер равен тому размеру,
который запросили. Т.е. мы его ЗНАЕМ.
0
xtorne21st
интересующийся
304 / 275 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
02.01.2013, 22:15  [ТС] #15
Цитата Сообщение от ~OhMyGodSoLong~ Посмотреть сообщение
Не по теме:
Вообще-то там всё сложнее. Она может 1) действительно молча возвращать NULL, 2) бросать исключение, 3) вызывать функцию-обработчик, которая должна или бросить исключение, или пристрелить программу, или найти память. По умолчанию второе.
Познавательно, спасибо.
0
02.01.2013, 22:15
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.01.2013, 22:15
Привет! Вот еще темы с ответами:

Как можно узнать размер выделенной динамической памяти, на которую ссылается указатель a? - C++
Скажем я в какой-то момент выделяю память под массив: int *a = new int ; затем память может изменяться как-то и конечный размер мне не...

Узнать адреса памяти - C++
Всем привет! Не знал в какой теме разместить, разместил тут. Как узнать адреса памяти? Тоесть есть определённая программа(в...

Узнать количество динамической памяти - C++
Здравствуйте. Препод задал задание на работу с динамической памятью. Саму работу сделал, но теперь вопрос - необходимо узнать сколько...

Возможно ли узнать, существуют ли другие указатели на данную область памяти? - C++
Возможно ли узнать, существуют ли другие указатели на данную область памяти? например: char * pChar = new char; //init ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.