Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.06.29;
Скачать: CL | DM;

Вниз

Дефрагментация кучи: Навяено веткой Ошибка "Out of memory"   Найти похожие ветки 

 
3PO   (2005-06-01 22:02) [0]

http://delphimaster.net/view/1-1117582199/

А есть ли возможность использовать при частой реаллокации функцию HeapCompact для дефрагментации памяти и как это может сказаться на переменных, расположенных в куче?


 
Defunct ©   (2005-06-02 01:06) [1]

3PO   (01.06.05 22:02)  
вероятно можно.
Однако процедуры дефрагментации очень ресурсоемкие, и их оправдано использовать только в приложениях, которые работают 24/7/365.


Есть более простое решение - прибегнуть к своппингу.
Сохранить на диск и удалить из памяти всю структуру данных при возникновении указанного в той ветке исключения. Потом создать структуру большего размера и загрузить из файла сохраненную ранее часть.


 
Alex Konshin ©   (2005-06-02 01:19) [2]

Честно говоря, не знаю, использует ли менеджер памяти функции Heap* (у меня тут нет Delphi). Скорее всего нет. Скорее всего он берет через VirtualAlloc сегментами размером кратным 64K и потом уж сам разбирается внутри. Потому очень сильно сомневаюсь, что вызов HeapCompact даст какой-нибудь результат.


 
Digitman ©   (2005-06-02 08:23) [3]


> Alex Konshin ©   (02.06.05 01:19) [2]


> не знаю, использует ли менеджер памяти функции Heap*


нет, явно не использует.
но использует Local*

цитата :

The LocalAlloc function allocates the specified number of bytes from the heap


> Скорее всего он берет через VirtualAlloc сегментами размером
> кратным 64K


под собственно данные - да.
но не обязательно размером кратным 64К


> сомневаюсь, что вызов HeapCompact даст какой-нибудь результат


даже не сомневайся, так оно и есть.
ВММ никогда не возвращает в кучу то что он оттуда взял ранее, поэтому причиной фрагментированности кучи его алгоритм быть не может



Страницы: 1 вся ветка

Текущий архив: 2005.06.29;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.066 c
4-1115051030
rolex
2005-05-02 20:23
2005.06.29
Как определить работает ли уже данное приложение или это его перв


14-1117649997
Вольный Стрелок
2005-06-01 22:19
2005.06.29
чем отличаются ToolBar, CoolBar, ControlBar?


1-1118126588
zamkom
2005-06-07 10:43
2005.06.29
Работа с файлами


3-1115984786
IGray
2005-05-13 15:46
2005.06.29
Как узнать, было ли к таблице применено ApplyRange?


1-1117985816
Galiaf
2005-06-05 19:36
2005.06.29
Сжатие программ.