IPB
ЛогинПароль:

> Правила раздела!

1. Заголовок или название темы должно быть информативным !
2. Все тексты фрагментов программ должны помещаться в теги [code] ... [/code] или [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ" и используйте ПОИСК !
4. НЕ используйте форум для личного общения!
5. Самое главное - это раздел теоретический, т.е. никаких задач и программ (за исключением небольших фрагментов) - для этого есть отдельный раздел!

> Эффективность менеджера памяти в Delphi
сообщение
Сообщение #1


Злостный любитель
*****

Группа: Пользователи
Сообщений: 1 755
Пол: Мужской

Репутация: -  62  +


Прочитав умные мысли про то, что память эффективнее выделять кусками, размер которых равен степени 2, я решил применить её в D7, подменив менеджер памяти на свой, отличающийся только тем, что размер блока дополняет до степени 2, и сравнить эффективность родного менеджера и подкорректированного.

{$APPTYPE CONSOLE}
uses
Windows;

type
proc = procedure;

procedure Stress; // думаю, достаточно интересная задача для менеджера памяти
var
p1, p2, p3, p4: array of byte;
i: integer;
begin
for i := 0 to 999999 do begin
SetLength(p1, i);
SetLength(p2, i);
SetLength(p3, i);
SetLength(p4, i);
end;
end;

procedure Test(p: proc);
var
T: cardinal;
begin
T := GetTickCount; while T = GetTickCount do; T := GetTickCount;
p;
WriteLn(integer(GetTickCount) - integer(T));
end;

function MyReallocMem(p: Pointer; size: Integer): Pointer; // äîïîëíèòü äî ñòåïåíè 2
var
aSize: integer;
begin
if size = 0 then aSize := 0 else begin
aSize := 1;
while aSize < size do aSize := aSize shl 1;
end;
Result := SysReallocMem(p, size);
end;

var
M: TMemoryManager;

begin
Test(Stress);
M.GetMem := SysGetMem;
M.FreeMem := SysFreeMem;
M.ReAllocMem := MyReAllocMem;
SetMemoryManager(M);
Test(Stress);
ReadLn;
end.


Программа вывела вот что (на современном компе):
Код

1031
1297

Я сделал такой вывод - при работе с динамическими массивами можно не заморачиваться и увеличивать длину по единичке, всё реализовано достаточно эффективно, советы дополнять до степени 2 в D7 (да и в других версиях, наверное, тоже) никакого смысла не имеют. Выходит, так?


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 20.05.2024 13:49
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name