WWW.ИСХОДНИКИ.РУ cpp.sources.ru
java.sources.ru web.sources.ru soft.sources.ru
jdbc.sources.ru asp.sources.ru api.sources.ru

  Форум на исходниках
  C / C++ / Visual C++
  Перегрузка delete.

СПРОСИТЬ  ОТВЕТИТЬ
профайл | регистрация | faq

Автор Тема:   Перегрузка delete.
server_mouse опубликован 31-10-2001 10:31 MSK   Click Here to See the Profile for server_mouse   Click Here to Email server_mouse  
Вот передаётся мне указатель. А как по этому указателю узнать сколько там памяти распределено? Есть же наверное стандартные смещения какие-то.
Flex Ferrum опубликован 31-10-2001 11:11 MSK     Click Here to See the Profile for Flex Ferrum  Click Here to Email Flex Ferrum     
А зачем? В простейшем случае для освобождения памяти ты можешь использовать free - а он-то знает, сколько памяти выделено для данного указателя. Если ты перегружаешь для мониторинга - то самое универсальное - это в new помещать полученный указатель и его размер в таблицу, а delete - его оттуда удалять. Тогда ты будешь иметь всю интересующую тебя информаци. А если собственный манагер памяти пишешь - то место, где хранится информация о размере, ты сам должен выбирать.
server_mouse опубликован 31-10-2001 12:27 MSK     Click Here to See the Profile for server_mouse  Click Here to Email server_mouse     
Именно для мониторинга. Но делать ещё и таблицу (её придётся делать динамической, т.е. опять таки через new/delete) както влом. просто хочется в лог-файл скидывать ещё и размер при удалении. Можно ли быть увереным, что delete удалит всё?
DmitryRyvkin опубликован 31-10-2001 12:29 MSK     Click Here to See the Profile for DmitryRyvkin  Click Here to Email DmitryRyvkin     
я счас провел небольшое исследование. (VC6 release)
Длина выделенного блока (+включая 4 байта самого размера)располагается по адресу этого блока -4.
Однако эта длина выравнивается по не очень ясному мне закону (нашел что
речь идет о GRANULARITY в вин памяти, и ,больше чем затребованный размер.
Кроме того, при выделении достаточно большого участка порядка тысяч байт
в старшем из 4-х байте устанавливались биты |0xa0. Может это какая-то метка
, только не знаю чего. Так что послушаем спецов.

PS А стоит ли этим пользоваться ? Опасно,имхо, и не красиво. Да и где
гарантия переносимости этой проги.

server_mouse опубликован 31-10-2001 12:58 MSK     Click Here to See the Profile for server_mouse  Click Here to Email server_mouse     
Да я ведь просто хочу отследить возможные утечки в дебаг... Вдруг я эти самые 4 байтика режу... Ужас!
Спасибо в общем.
Flex Ferrum опубликован 31-10-2001 13:25 MSK     Click Here to See the Profile for Flex Ferrum  Click Here to Email Flex Ferrum     
ИМХО, CRTL тебе гарантирует, что, в нормальном режиме работы, сколько памяти ты malloc'ом выделил, столько тебе free и освободит. Если эта схема нарушается, то CRTL (в DEBUG-режиме) начнет страшно ругаться различными exception'ами, что, мол, нарушена целостность хипа. Так что мой тебе совет - не заморачивайся. Кстати, если память утекает, то IDE тебе об этом пишет при выходе из программы.

СПРОСИТЬ  ОТВЕТИТЬ
Перейти:


E-mail | WWW.ИСХОДНИКИ.RU

Powered by: Ultimate Bulletin Board, Freeware Version 5.10a
Purchase our Licensed Version- which adds many more features!
© Infopop Corporation (formerly Madrona Park, Inc.), 1998 - 2000.