Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 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.039 c
1-1083763083
mih
2004-05-05 17:18
2004.05.23
Работа с датами


1-1084173767
Master Paleva
2004-05-10 11:22
2004.05.23
Как освободить память?


1-1084333644
WinLamka
2004-05-12 07:47
2004.05.23
Динамическая структура.


14-1083382635
_
2004-05-01 07:37
2004.05.23
Книга жалоб


3-1083072776
Slon_SCG
2004-04-27 17:32
2004.05.23
Автоматическое восстановление БД InterBase после сбоя





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский