![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Многоразовое использование памяти
learner © (2006-09-27 10:44:00)Здравствуйте !
Какой из двух вариантов предпочтительнее использовать
в плане "чтобы системе проще жилось" и быстродействия ?
Вариант 1:
function GetResult(var pData: Pointer; var cbData: DWord): DWord;
var
NeedMemSize: DWord;
begin
NeedMemSize:=0;
Result:=WorkWithMem(pData, cbData, NeedMemSize);
if Result = Мало_памяти then
begin
ReallocMem(pData, NeedMemSize);
cbData:=NeedMemSize;
Result:=WorkWithMem(pData, cbData, MemSize);
end;
end;
procedure Test(aCount: integer);
var
i: integer;
pData: Pointer;
cbData: DWord
begin
cbData:=0;
pData:=nil;
try
for i:=0 to aCount - 1 do GetResult(pData, cbData);
finally
ReallocMem(pData, 0);
end;
end;
Вариант 2:
function GetResultFix: DWord;
var
NeedMemSize: DWord;
pData: array[0..MAX_POSSIBLE_SIZE_FOR_CURRENT_WORK - 1] of Byte;
begin
Result:=WorkWithMem(@pData[0], MAX_POSSIBLE_SIZE_FOR_CURRENT_WORK, NeedMemSize);
end;
procedure TestFix(aCount: integer);
var
i: integer;
begin
for i:=0 to aCount - 1 do GetResultFix;
end;
learner (2006-09-27 13:03:00) [1]Спасибо
Игорь Шевченко (2006-09-27 11:05:00) [2]
> Какой из двух вариантов предпочтительнее использовать
> в плане "чтобы системе проще жилось" и быстродействия ?
первый. он проще и понятнее.
clickmaker (2006-09-27 11:02:00) [3]нет тут однозначного ответа.
Зависит от приоритета твоей задачи в системе, самого MAX_POSSIBLE_SIZE_FOR_CURRENT_WORK, размера оперативки, своп-файла...
Если проге часто требуются блоки примерно одинаковогоразмера, то конечно лучше выделить один раз по максимуму.
Если разного и не очень часто, то лучше по запросу.