3 / 0 / 0
Регистрация: 08.07.2013
Сообщений: 351
|
||||||
1 | ||||||
Как узнать размер массива в динамической памяти?16.08.2013, 20:19. Показов 11670. Ответов 7
Метки нет (Все метки)
Добрый вечер еще раз!
Напишите пожалуйста как можно узнать истинный размер массива, находящегося в динамической памяти, созданными при помощи malloc или calloc. Т.к. если выделить константный размер массива в динамической памяти (например
0
|
16.08.2013, 20:19 | |
Ответы с готовыми решениями:
7
Как можно узнать размер выделенной динамической памяти, на которую ссылается указатель a? Как можно узнать размер динамической страницы Как узнать размер оперативной памяти? Как узнать размер проги в памяти ? |
55 / 55 / 6
Регистрация: 07.07.2013
Сообщений: 345
|
||||||
16.08.2013, 20:34 | 2 | |||||
0
|
3257 / 2059 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
|
|
16.08.2013, 20:37 | 3 |
BESSON_off, когда выделяешь память, явно указываешь размер, т.е. гарантировано знаешь его. Дальше - таскать везде за собой эту переменную.
0
|
Неэпический
|
|||||||||||
16.08.2013, 20:43 | 4 | ||||||||||
Сообщение было отмечено как решение
Решение
В общем случае никак - только таскать с собой размер.
Например, в Visual C++ есть не стандартная функция
5
|
16.08.2013, 21:58 | 5 |
Для всеобщего понимания объясню что хотели сказать во 2-м и 4-м посте.
Дело в том, что размер памяти, выделяемой функциями malloc, calloc, оператором new в C++ и прочими аллокаторами должен где-то храниться. Разумеется в самой выделенной памяти он храниться не может, т.к. запросто затрется другими данными. После блока выделенной памяти он храниться тоже не может, т.к. функция free и оператор delete в C++ просто не смогут его найти, т.к. для того чтобы его найти надо будет знать его размер. Отсюда следует вывод: самый простой и очевидный способ хранения размера выделенного блока памяти следует хранить перед самим блоком памяти, например: мы выделяем блок памяти размером 10 байт, получаем указатель на выделенную область памяти: 0xaabbccdd, тем самым размер этой области (например 4 байта - 2 в 32-й степени) записывается в адрес 0xaabbccd9, т.е. функция/оператор освобождения памяти уже знает какой именно размер памяти пометить свободным. Надеюсь кому-то помог мой ликбез. Стоит обратить внимание, что все это зависит от реализации компилятора. Каждый может вести себя "немного" по-своему... Добавлено через 59 секунд Ах да, мораль сей басни такова: узнать безопасно - никак.
4
|
3 / 0 / 0
Регистрация: 08.07.2013
Сообщений: 351
|
|
17.08.2013, 20:03 [ТС] | 6 |
0
|
0 / 0 / 0
Регистрация: 10.06.2011
Сообщений: 7
|
|
09.02.2020, 12:57 | 7 |
Мораль улыбнула.. Но как-то delete [] об этом узнает, дрянь он этакая...
0
|
Неэпический
|
|
09.02.2020, 13:40 | 8 |
0
|
09.02.2020, 13:40 | |
09.02.2020, 13:40 | |
Помогаю со студенческими работами здесь
8
Как узнать размер памяти программы (в параграфах)? Как узнать размер используемой памяти процесса? Как узнать размер страницы при страничной адресации памяти? Узнать количество динамической памяти Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |