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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.75
xtorne21st
интересующийся
300 / 271 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
02.01.2013, 21:22     Как узнать объём выделеной динамичесой памяти? #1
sizeof(new_alloc) в этом случаи бесполезно так как указатель у меня всегда равен 4 байта. Можно, конечно при помощи цикла передвигать указатель на одно значение и посчитать таким образом кол. байт. Но если ли более тривиальный способ?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.01.2013, 21:22     Как узнать объём выделеной динамичесой памяти?
Посмотрите здесь:

C++ Как можно узнать размер выделенной динамической памяти, на которую ссылается указатель a?
C++ Объём памяти доступный процессу
Как узнать, сколько памяти занимает тот или иной элемент программы? C++
C++ как узнать кол-во доступной памяти портабельным кодом
C++ Как узнать, в процесе отладки, сколько памяти занимает программа?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11841 / 6820 / 771
Регистрация: 27.09.2012
Сообщений: 16,911
Записей в блоге: 2
Завершенные тесты: 1
02.01.2013, 21:23     Как узнать объём выделеной динамичесой памяти? #2
Цитата Сообщение от xtorne21st Посмотреть сообщение
Но если ли более тривиальный способ?
"запомнить" при выделении
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
02.01.2013, 21:23     Как узнать объём выделеной динамичесой памяти? #3
Цитата Сообщение от xtorne21st Посмотреть сообщение
Но если ли более тривиальный способ?
дополнительно хранить размер выделенной памяти
Цитата Сообщение от xtorne21st Посмотреть сообщение
Можно, конечно при помощи цикла передвигать указатель на одно значение и посчитать таким образом кол. байт
чего-чего?
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11841 / 6820 / 771
Регистрация: 27.09.2012
Сообщений: 16,911
Записей в блоге: 2
Завершенные тесты: 1
02.01.2013, 21:25     Как узнать объём выделеной динамичесой памяти? #4
Цитата Сообщение от xtorne21st Посмотреть сообщение
Можно, конечно при помощи цикла передвигать указатель на одно значение и посчитать таким образом кол. байт.
И выйти за пределы выделенной памяти ибо как Вы узнаете о том, что Вы находитесь в пределах выделенного блока памяти?
xtorne21st
интересующийся
300 / 271 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
02.01.2013, 21:42  [ТС]     Как узнать объём выделеной динамичесой памяти? #5
Цитата Сообщение от Croessmah Посмотреть сообщение
И выйти за пределы выделенной памяти ибо как Вы узнаете о том, что Вы находитесь в пределах выделенного блока памяти?
Ну например если память выделялась для строки, то можно осуществить проверку на символ конца файла. Для других случаев наверно нет решения как я понял.
Schizorb
 Аватар для Schizorb
508 / 460 / 16
Регистрация: 07.04.2012
Сообщений: 865
Записей в блоге: 1
Завершенные тесты: 1
02.01.2013, 21:47     Как узнать объём выделеной динамичесой памяти? #6
Цитата Сообщение от xtorne21st Посмотреть сообщение
Ну например если память выделялась для строки, то можно осуществить проверку на символ конца файла.
Так что ли?

C++
1
char * str = new char[10];
И что там будет после 10-го элемента? Тем более откуда конец файла?
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11841 / 6820 / 771
Регистрация: 27.09.2012
Сообщений: 16,911
Записей в блоге: 2
Завершенные тесты: 1
02.01.2013, 21:47     Как узнать объём выделеной динамичесой памяти? #7
Цитата Сообщение от xtorne21st Посмотреть сообщение
Ну например если память выделялась для строки, то можно осуществить проверку на символ конца файла.
ага...
C++
1
2
char * s = new char[100500];
strcpy(s,"+100500?");
И что Вы получите?
xtorne21st
интересующийся
300 / 271 / 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
Модератор
Эксперт С++
 Аватар для Croessmah
11841 / 6820 / 771
Регистрация: 27.09.2012
Сообщений: 16,911
Записей в блоге: 2
Завершенные тесты: 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
Модератор
Эксперт С++
 Аватар для zss
5950 / 5555 / 1786
Регистрация: 18.12.2011
Сообщений: 14,195
Завершенные тесты: 1
02.01.2013, 22:07     Как узнать объём выделеной динамичесой памяти? #10
Какой-то странный диспут.
Вопрос-то яйца выеденного не стоит.
Операция выделения памяти возвращает указатель на выделенный блок
(тогда размер равен тому, который запросили)
или NULL (тогда размер выделенного блока равен нулю).
И ВСЕ!!!! Других вариантов нет.
xtorne21st
интересующийся
300 / 271 / 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
Модератор
Эксперт С++
 Аватар для Croessmah
11841 / 6820 / 771
Регистрация: 27.09.2012
Сообщений: 16,911
Записей в блоге: 2
Завершенные тесты: 1
02.01.2013, 22:09     Как узнать объём выделеной динамичесой памяти? #12
Цитата Сообщение от xtorne21st Посмотреть сообщение
При всём моём уважении, но я вообще не понимаю смысл копирования строкового литерала, когда речь идёт просто о том, чтобы посчитать выделенную память динамического пространства.
В общем, учите тогда матчасть, если Вы совсем не поняли о чем речь
OhMyGodSoLong
~ Эврика! ~
 Аватар для OhMyGodSoLong
1234 / 983 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
02.01.2013, 22:10     Как узнать объём выделеной динамичесой памяти? #13
Цитата Сообщение от zss Посмотреть сообщение
Какой-то странный диспут.
Вопрос-то яйца выеденного не стоит.
Операция выделения памяти возвращает указатель на выделенный блок
(тогда размер равен тому, который запросили)
или NULL (тогда размер выделенного блока равен нулю).
И ВСЕ!!!! Других вариантов нет.

Не по теме:

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

zss
Модератор
Эксперт С++
 Аватар для zss
5950 / 5555 / 1786
Регистрация: 18.12.2011
Сообщений: 14,195
Завершенные тесты: 1
02.01.2013, 22:15     Как узнать объём выделеной динамичесой памяти? #14
Цитата Сообщение от ~OhMyGodSoLong~ Посмотреть сообщение
Вообще-то там всё сложнее
Главное, что если память выделилась, то ее размер равен тому размеру,
который запросили. Т.е. мы его ЗНАЕМ.
xtorne21st
интересующийся
300 / 271 / 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++

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

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

Текущее время: 08:56. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru