Форум: "Основная";
Текущий архив: 2005.06.29;
Скачать: [xml.tar.bz2];
ВнизДефрагментация кучи: Навяено веткой Ошибка "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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.04 c