Форум: "Прочее";
Текущий архив: 2009.02.15;
Скачать: [xml.tar.bz2];
ВнизОценил простоту и мощь Lua Найти похожие ветки
← →
@!!ex © (2008-12-12 16:51) [40]> [39] Mystic © (12.12.08 16:42)
Приведите код с TStringList, сравним читабельность.
Как уже говорилось выше - выделение блоками применятся(лично мной) там, где это актуально. Почему ЗДЕСЬ не актауально, уже объяснил.
← →
Palladin © (2008-12-12 16:58) [41]
> Приведите код с TStringList, сравним читабельность.
добавление sl.Add(Name,TObject(Address));
обращение
procedure TLUAParser.LuaUpdateMethods;
var
i:integer;
begin
for I := 0 to Length(FExternMethods) - 1 do
LuaAddMethod(sl[i],lua_CFunction(sl.Objects[i]));
end;
ку ?
← →
Sapersky (2008-12-12 16:59) [42]Автор, вроде как, пишет на BDS, а там (начиная с 2006-го) проблема решена в корне - сам менеджер памяти (FastMM) перевыделяет память блоками, на манер TList. О чём, собственно, уже писали в [31].
Хотя лично я, чтобы не зависеть от версий и менеджеров, предпочитаю самописную "шаманскую" функцию перевыделения.
← →
Mystic © (2008-12-12 17:27) [43]> Sapersky (12.12.08 16:59) [42]
Смотреть надо, какой минимальный размер блока, какой между ними шаг (постоянный/экспоненциальный), алгоритм перераспределения...
← →
Городской Шаман (2008-12-12 17:37) [44]
> Mystic © (12.12.08 16:42) [39]
А не проще ли поставить нормальный менеджер памяти, который об этом позаботится автоматически?
FastMM - нет проблем! :)
← →
Городской Шаман (2008-12-12 17:41) [45]
> Mystic © (12.12.08 17:27) [43]
>
> > Sapersky (12.12.08 16:59) [42]
>
> Смотреть надо, какой минимальный размер блока, какой между
> ними шаг (постоянный/экспоненциальный), алгоритм перераспределения.
Угу написать имитационную программу в matlab и на ядро системы затратить 15 лет (Minix3), когда Linux, не говоря уже о тупой кривой и глюкавой винде (вспомним работоспособность Win95) вовсю господствуют на рынке.
← →
clickmaker © (2008-12-12 17:42) [46]> вспомним работоспособность Win95
лучше 3.1
← →
Sapersky (2008-12-12 17:42) [47]Смотреть надо, какой минимальный размер блока, какой между ними шаг (постоянный/экспоненциальный), алгоритм перераспределения...
Алгоритм перевыделения в общем похож на TList.Grow. Для маленьких блоков в 2 раза (+ ещё какой-то довесок), для средних и больших - на 25%. Правда, какой конкретно размер у этих больших-маленьких - не смотрел. Но наверное уж подобран оптимальный.
{This pointer is being reallocated to a larger block and therefore it is
logical to assume that it may be enlarged again. Since reallocations are
expensive, there is a minimum upsize percentage to avoid unnecessary
future move operations.}
{Must grow with at least 100% + x bytes}
LNewAllocSize := LOldAvailableSize * 2 + SmallBlockUpsizeAdder;
Для "средних" блоков:
{Couldn"t upsize in place. Grab a new block and move the data across:
If we have to reallocate and move medium blocks, we grow by at
least 25%}
LMinimumUpsize := LOldAvailableSize + (LOldAvailableSize shr 2);
Для "больших" тоже 25%.
( http://delphimaster.net/view/1-1226920476/ )
← →
Городской Шаман (2008-12-12 17:44) [48]
> Sapersky (12.12.08 16:59) [42]
>
> Автор, вроде как, пишет на BDS, а там (начиная с 2006-го)
Так ничего не мешает даже к Delphi5 подключить FastMM опционально. Или на Google ссылку не нашли?
Извините, но когда мне понадобится оптимизация, а начну часть кода писать на assembler, там будет гораздо более эффективное распределение.
← →
Городской Шаман (2008-12-12 17:49) [49]
> Sapersky (12.12.08 17:42) [47]
У динамических массивов есть такая замечательная особенность как управление их жизнью со стороны компилятора, по типу интерфейсов в Delphi. Во многих случаях возможность не заниматься освобождением памяти облегчает жизнь и избавляет от глюков.
Поэтому и Java и C# пользуются популярностью, проигрывая нативным языкам во всем остальном. Повисший сервер это очень плохо, а на C++ или Delphi он до такой стабильности вылизывается годами.
← →
Mystic © (2008-12-12 18:20) [50]> Sapersky (12.12.08 17:42) [47]
Да, я уже посмотрел. Все равно в мозгу мало ячеек памяти чтобы помнить что, где и как реализовано. Что опасно, а что нет. Привычка со старых времен.
← →
@!!ex © (2008-12-14 17:45) [51]Охрененный такой косячек в коде...
lua_pop(FLUAState, 1);
должно бытьlua_pop(FLUAState, -1);
Ну и соответственно где другие цифры, все равно - должен быть.
← →
@!!ex © (2008-12-14 18:00) [52]Еще косяк. pcall второй аргумент - это количество результатов. Он в моем коде всегда 0. Это не правильно.
вернее для процедур это правильно. А вот функции должны указывать количество результатов, иначе нифига работать не будет.
← →
Kostafey © (2008-12-18 01:45) [53]> Сделал классовую обертку(может кому понадобится?).
Э-э-э вроде ж ketmar делал?
Хотя, я чессно говоря не особо вник.
Страницы: 1 2 вся ветка
Форум: "Прочее";
Текущий архив: 2009.02.15;
Скачать: [xml.tar.bz2];
Память: 0.56 MB
Время: 0.007 c