Форум программистов, компьютерный форум CyberForum.ru

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

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

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

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

sizeof(new_alloc) в этом случаи бесполезно так как указатель у меня всегда равен 4 байта. Можно, конечно при помощи цикла передвигать указатель на одно значение и посчитать таким образом кол. байт. Но если ли более тривиальный способ?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.01.2013, 21:22     Как узнать объём выделеной динамичесой памяти?
Посмотрите здесь:
Как очистить массив выделеной памяти C++
C++ Объём памяти доступный процессу
C++ Как узнать размер массива в динамической памяти?
C++ Как узнать объем доступной памяти портабельным кодом?
C++ Как узнать, в процесе отладки, сколько памяти занимает программа?
C++ Как можно узнать размер выделенной динамической памяти, на которую ссылается указатель a?
Как узнать, сколько памяти занимает тот или иной элемент программы? C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт CЭксперт С++
12980 / 7292 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 1
02.01.2013, 21:23     Как узнать объём выделеной динамичесой памяти? #2
Цитата Сообщение от xtorne21st Посмотреть сообщение
Но если ли более тривиальный способ?
"запомнить" при выделении
Jupiter
Каратель
Эксперт С++
6552 / 3972 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
02.01.2013, 21:23     Как узнать объём выделеной динамичесой памяти? #3
Цитата Сообщение от xtorne21st Посмотреть сообщение
Но если ли более тривиальный способ?
дополнительно хранить размер выделенной памяти
Цитата Сообщение от xtorne21st Посмотреть сообщение
Можно, конечно при помощи цикла передвигать указатель на одно значение и посчитать таким образом кол. байт
чего-чего?
Croessmah
Модератор
Эксперт CЭксперт С++
12980 / 7292 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 1
02.01.2013, 21:25     Как узнать объём выделеной динамичесой памяти? #4
Цитата Сообщение от xtorne21st Посмотреть сообщение
Можно, конечно при помощи цикла передвигать указатель на одно значение и посчитать таким образом кол. байт.
И выйти за пределы выделенной памяти ибо как Вы узнаете о том, что Вы находитесь в пределах выделенного блока памяти?
xtorne21st
интересующийся
303 / 274 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
02.01.2013, 21:42  [ТС]     Как узнать объём выделеной динамичесой памяти? #5
Цитата Сообщение от Croessmah Посмотреть сообщение
И выйти за пределы выделенной памяти ибо как Вы узнаете о том, что Вы находитесь в пределах выделенного блока памяти?
Ну например если память выделялась для строки, то можно осуществить проверку на символ конца файла. Для других случаев наверно нет решения как я понял.
Schizorb
509 / 461 / 16
Регистрация: 07.04.2012
Сообщений: 865
Записей в блоге: 1
Завершенные тесты: 1
02.01.2013, 21:47     Как узнать объём выделеной динамичесой памяти? #6
Цитата Сообщение от xtorne21st Посмотреть сообщение
Ну например если память выделялась для строки, то можно осуществить проверку на символ конца файла.
Так что ли?

C++
1
char * str = new char[10];
И что там будет после 10-го элемента? Тем более откуда конец файла?
Croessmah
Модератор
Эксперт CЭксперт С++
12980 / 7292 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 1
02.01.2013, 21:47     Как узнать объём выделеной динамичесой памяти? #7
Цитата Сообщение от xtorne21st Посмотреть сообщение
Ну например если память выделялась для строки, то можно осуществить проверку на символ конца файла.
ага...
C++
1
2
char * s = new char[100500];
strcpy(s,"+100500?");
И что Вы получите?
xtorne21st
интересующийся
303 / 274 / 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++ не предусмотрена такая возможность.
Croessmah
Модератор
Эксперт CЭксперт С++
12980 / 7292 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 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++ не предусмотрена такая возможность.
Выделение памяти и контроль за ее использованием - головная боль программиста. В общем так и должно быть, не все же за вас делать...
zss
Модератор
Эксперт С++
6287 / 5890 / 1910
Регистрация: 18.12.2011
Сообщений: 15,122
Завершенные тесты: 1
02.01.2013, 22:07     Как узнать объём выделеной динамичесой памяти? #10
Какой-то странный диспут.
Вопрос-то яйца выеденного не стоит.
Операция выделения памяти возвращает указатель на выделенный блок
(тогда размер равен тому, который запросили)
или NULL (тогда размер выделенного блока равен нулю).
И ВСЕ!!!! Других вариантов нет.
xtorne21st
интересующийся
303 / 274 / 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 (тогда размер выделенного блока равен нулю).
И ВСЕ!!!! Других вариантов нет.
Как я понял, что никак нельзя, этого я и хотел услышать.
Croessmah
Модератор
Эксперт CЭксперт С++
12980 / 7292 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 1
02.01.2013, 22:09     Как узнать объём выделеной динамичесой памяти? #12
Цитата Сообщение от xtorne21st Посмотреть сообщение
При всём моём уважении, но я вообще не понимаю смысл копирования строкового литерала, когда речь идёт просто о том, чтобы посчитать выделенную память динамического пространства.
В общем, учите тогда матчасть, если Вы совсем не поняли о чем речь
OhMyGodSoLong
~ Эврика! ~
1243 / 992 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
02.01.2013, 22:10     Как узнать объём выделеной динамичесой памяти? #13
Цитата Сообщение от zss Посмотреть сообщение
Какой-то странный диспут.
Вопрос-то яйца выеденного не стоит.
Операция выделения памяти возвращает указатель на выделенный блок
(тогда размер равен тому, который запросили)
или NULL (тогда размер выделенного блока равен нулю).
И ВСЕ!!!! Других вариантов нет.

Не по теме:

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

zss
Модератор
Эксперт С++
6287 / 5890 / 1910
Регистрация: 18.12.2011
Сообщений: 15,122
Завершенные тесты: 1
02.01.2013, 22:15     Как узнать объём выделеной динамичесой памяти? #14
Цитата Сообщение от ~OhMyGodSoLong~ Посмотреть сообщение
Вообще-то там всё сложнее
Главное, что если память выделилась, то ее размер равен тому размеру,
который запросили. Т.е. мы его ЗНАЕМ.
xtorne21st
интересующийся
303 / 274 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
02.01.2013, 22:15  [ТС]     Как узнать объём выделеной динамичесой памяти? #15
Цитата Сообщение от ~OhMyGodSoLong~ Посмотреть сообщение
Не по теме:
Вообще-то там всё сложнее. Она может 1) действительно молча возвращать NULL, 2) бросать исключение, 3) вызывать функцию-обработчик, которая должна или бросить исключение, или пристрелить программу, или найти память. По умолчанию второе.
Познавательно, спасибо.
Croessmah
02.01.2013, 22:18
  #16

Не по теме:

Цитата Сообщение от zss Посмотреть сообщение
Т.е. мы его ЗНАЕМ.
т.е. о чем Вам и написали в первых двух постах.

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.01.2013, 22:25     Как узнать объём выделеной динамичесой памяти?
Еще ссылки по теме:
Узнать адреса памяти C++
C++ Узнать количество динамической памяти
C++ Как оценить объём кучи
C++ Возможно ли узнать, существуют ли другие указатели на данную область памяти?
Как узнать количество вводимых чисел? Как их записать все в массив? C++

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

Или воспользуйтесь поиском по форуму:
Kastaneda
Форумчанин
Эксперт С++
4479 / 2841 / 227
Регистрация: 12.12.2009
Сообщений: 7,224
Записей в блоге: 1
Завершенные тесты: 1
02.01.2013, 22:25     Как узнать объём выделеной динамичесой памяти? #17
Цитата Сообщение от zss Посмотреть сообщение
Главное, что если память выделилась, то ее размер равен тому размеру
Как минимум тому размеру, который запросили. Если например operator new реализован через malloc, то на самом деле там выделяется больше памяти, чем реально надо. И даже если не через malloc, все зависит от менеджера памяти.
Yandex
Объявления
02.01.2013, 22:25     Как узнать объём выделеной динамичесой памяти?
Ответ Создать тему
Опции темы

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