Автор
|
Тема: Перегрузка delete.
|
server_mouse |
опубликован 31-10-2001 10:31 MSK
Вот передаётся мне указатель. А как по этому указателю узнать сколько там памяти распределено? Есть же наверное стандартные смещения какие-то.
|
Flex Ferrum
|
опубликован 31-10-2001 11:11 MSK
А зачем? В простейшем случае для освобождения памяти ты можешь использовать free - а он-то знает, сколько памяти выделено для данного указателя. Если ты перегружаешь для мониторинга - то самое универсальное - это в new помещать полученный указатель и его размер в таблицу, а delete - его оттуда удалять. Тогда ты будешь иметь всю интересующую тебя информаци. А если собственный манагер памяти пишешь - то место, где хранится информация о размере, ты сам должен выбирать. |
server_mouse
|
опубликован 31-10-2001 12:27 MSK
Именно для мониторинга. Но делать ещё и таблицу (её придётся делать динамической, т.е. опять таки через new/delete) както влом. просто хочется в лог-файл скидывать ещё и размер при удалении. Можно ли быть увереным, что delete удалит всё? |
DmitryRyvkin
|
опубликован 31-10-2001 12:29 MSK
я счас провел небольшое исследование. (VC6 release) Длина выделенного блока (+включая 4 байта самого размера)располагается по адресу этого блока -4. Однако эта длина выравнивается по не очень ясному мне закону (нашел что речь идет о GRANULARITY в вин памяти, и ,больше чем затребованный размер. Кроме того, при выделении достаточно большого участка порядка тысяч байт в старшем из 4-х байте устанавливались биты |0xa0. Может это какая-то метка , только не знаю чего. Так что послушаем спецов.PS А стоит ли этим пользоваться ? Опасно,имхо, и не красиво. Да и где гарантия переносимости этой проги.
|
server_mouse
|
опубликован 31-10-2001 12:58 MSK
Да я ведь просто хочу отследить возможные утечки в дебаг... Вдруг я эти самые 4 байтика режу... Ужас! Спасибо в общем. |
Flex Ferrum
|
опубликован 31-10-2001 13:25 MSK
ИМХО, CRTL тебе гарантирует, что, в нормальном режиме работы, сколько памяти ты malloc'ом выделил, столько тебе free и освободит. Если эта схема нарушается, то CRTL (в DEBUG-режиме) начнет страшно ругаться различными exception'ами, что, мол, нарушена целостность хипа. Так что мой тебе совет - не заморачивайся. Кстати, если память утекает, то IDE тебе об этом пишет при выходе из программы. |