Форум: "Потрепаться";
Текущий архив: 2004.05.23;
Скачать: [xml.tar.bz2];
ВнизНа суд народа Найти похожие ветки
← →
Ultr © (2004-04-30 18:03) [0]В sysutil"е (помоему) есть ф-я GetDir(drive,var result), которая в большинстве случаев используется с drive=0, и возвращает путь текущей папки , в ее коде юзается ф-я GetCurrentDirectory, с параметрром типа PAnsiChar, так вот этот парам. работает только если его, так сказать проинициализить, то-бишь память выделить, в GetDir это делается путем задания переменной типа array[0..259] of Char, но на мой взгляд это не оптимально с точки зрения памяти (конечно один раз 260 байт - не много, но в делфях все аналогичные ф-и прописаны именно так), я предлагаю сделать так:
function CurDir: string;
var temp: PAnsiChar;
begin
GetMem(temp,MAX_PATH); --- выделяем память динамически
GetCurrentDirectory(MAX_PATH,temp);
result:=temp;
FreeMem(temp); --- а потам и высвобождаем
if length(result)>3 then result:=result+"\";
end;</CODE
конечно у такого варианта есть свой минус - грубо говоря перекладываем нагрузку с памяти на процессор, но по-моему для ф-й такого рода это не страшно, т.к. вызываются они по идее один раз за запуск. (а в делфевском варианте получается ты один раз запустил ф-ю - 260 байт забил,и так они и висят до конца)
← →
Gero © (2004-04-30 18:08) [1]Пост не читал, но по коду могу сказать, что try..finally не помешал бы.
← →
Ultr © (2004-04-30 18:11) [2]а зачем здесь try..finally... ??? :((
← →
Gero © (2004-04-30 18:23) [3]GetMem - FreeMem.
Хотя я могу и ошибаться...
← →
Ultr © (2004-04-30 18:24) [4]люди ответьте по сути (try..fin не суть)
← →
Jack128 © (2004-04-30 18:28) [5]
> а в делфевском варианте получается ты один раз запустил
> ф-ю - 260 байт забил,и так они и висят до конца)
до выхода из функции и висят эти 260 байт. Тоже, что и твоем варианте..
← →
Ultr © (2004-04-30 18:32) [6]Вот и не правда, удаляются прикрасно...
(проверял ставя вместо MAX_PATH чило 1000000(~мег)-на начале процедуры мег приростает, а по окончании отпадает.)
← →
default © (2004-04-30 20:04) [7]Ultr © (30.04.04 18:32) [6]
наоборот код sysutils самый быстрый, вместо всяких GetMem-ов и FreeMem-ов для выделения памяти используется стек, а кусок в нём выделяется одной командой add esp, -$...
← →
default © (2004-04-30 20:05) [8]лучше сказать что не выделяется, а резервируется наверно
← →
Anatoly Podgoretsky © (2004-04-30 20:18) [9]Ultr © (30.04.04 18:03)
Ты не понимаешь как работает стек и локальные переменные в процедуре. Вот твой код по сранению со стандартным очень неоптимален.
Страницы: 1 вся ветка
Форум: "Потрепаться";
Текущий архив: 2004.05.23;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.036 c