|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Риторический вопрос
У меня следующие вопросы:
Если память выделенную функциями GetMem, New, конструкторами объектов и т.д. не освободить, а просто потерять указатель, то эта память становится недоступной? А после завершения приложения? И что происходит если возвращаемый функцией тип - указатель, и под него выделена память в теле функции, а она вызывается как процедура? Что наиболее быстро работает если речь идет о обработке больших 2-х и более мерных массивах? Есть ли резон использовать array of array ... Если не трудно, кинте ссылки на хороший материал, где глубоко описано ООп и память вообще, как и где что живет и взаимодействует(функции, переменные, типы, классы). Очень интересно. P.S. Пооместить не знал где. |
#2
|
|||
|
|||
Если потерять указатель, а потом его вспомнить, то снова можно использовать эту память %) Память останется выделенной на протяжении всей работы приложения. А вот после завершения будет освобождена.
Цитата:
Если 1е, то указатель процедура не вернет, память будет выделена, ссылка на нее есстесно потеряется... но память будеть оставаться распределенной в куче до завершения процесса. Если речь об обработке многомерных массивов, то тут скорость зависит в 1ю очередь от твоего алгоритма обработки массива. В делфи многомерный массив - это указатель на память, где хранится массив указателей, ссылающихся на другие указатели и т.д. в зависимости от n-мерности, в конце которые указывают на память, где хранятся сами значения. Если массив динамический, то распределяется он точно в куче. |
#3
|
|||
|
|||
То есть например:
procedure KillByte; var P: Pointer; begin GetMem(P, 1); end; Убивает байт памяти, который становится недоступен ни данному процессу, ни другому? А после завершения процесса он будет доступен. Освобождать память от используемых на всем протяжении работы приложения структур тогда необязатьльно в его финальной части (как это делается во всей литературе). Правильно я понял? А какие "несознательные" следы тогда может оставлять приложение? |
#4
|
|||
|
|||
Цитата:
Потерянный указатель - проблема программиста в данном случае. Да, после завершения процесса память освободится. Если вдаваться в технические подробности, то 1 байт никогда не резервируется, выделяется кусок памяти, когда он заполнится выделяется еще один и т.д. Цитата:
А кто сказал что память освобождают именно в финальной части? Память освобождают когда хранящиеся в ней данные уже не нужны. Если этого не делать, ваше приложение может сожрать мегабайт 100 или больше оперативы. В зависимости от запущенности случая)) Но даже в конце работы приложения настоятельно советую освобождать память, это хороший тон. вот кстати интересная ссылочка, на тему менеджера памяти в Делфи: http://rsdn.ru/article/Delphi/memmanager.xml |
#5
|
|||
|
|||
Или вот еще статейка. То, что в ней описано, по-моему, обязан знать каждый программер платформы win32.
http://www.citforum.ru/operating_sys...ntadm_01.shtml //не совсем в тему, но статья полезная. И про менеджер памяти Виндовса там рассказывается |
#6
|
|||
|
|||
Спасибо.
А как уничтожить неглавную форму при ее закрытии, без кода в модуле главной формы? |