-
> [39] Mystic © (12.12.08 16:42)
Приведите код с TStringList, сравним читабельность. Как уже говорилось выше - выделение блоками применятся(лично мной) там, где это актуально. Почему ЗДЕСЬ не актауально, уже объяснил.
-
> Приведите код с 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;
ку ?
-
Автор, вроде как, пишет на BDS, а там (начиная с 2006-го) проблема решена в корне - сам менеджер памяти (FastMM) перевыделяет память блоками, на манер TList. О чём, собственно, уже писали в [31]. Хотя лично я, чтобы не зависеть от версий и менеджеров, предпочитаю самописную "шаманскую" функцию перевыделения.
-
> Sapersky (12.12.08 16:59) [42]
Смотреть надо, какой минимальный размер блока, какой между ними шаг (постоянный/экспоненциальный), алгоритм перераспределения...
-
> Mystic © (12.12.08 16:42) [39]
А не проще ли поставить нормальный менеджер памяти, который об этом позаботится автоматически?
FastMM - нет проблем! :)
-
> Mystic © (12.12.08 17:27) [43] > > > Sapersky (12.12.08 16:59) [42] > > Смотреть надо, какой минимальный размер блока, какой между > ними шаг (постоянный/экспоненциальный), алгоритм перераспределения.
Угу написать имитационную программу в matlab и на ядро системы затратить 15 лет (Minix3), когда Linux, не говоря уже о тупой кривой и глюкавой винде (вспомним работоспособность Win95) вовсю господствуют на рынке.
-
> вспомним работоспособность Win95
лучше 3.1
-
Смотреть надо, какой минимальный размер блока, какой между ними шаг (постоянный/экспоненциальный), алгоритм перераспределения...Алгоритм перевыделения в общем похож на 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://pda.delphimaster.net/?id=1226920476&n=0 )
-
> Sapersky (12.12.08 16:59) [42] > > Автор, вроде как, пишет на BDS, а там (начиная с 2006-го)
Так ничего не мешает даже к Delphi5 подключить FastMM опционально. Или на Google ссылку не нашли?
Извините, но когда мне понадобится оптимизация, а начну часть кода писать на assembler, там будет гораздо более эффективное распределение.
-
> Sapersky (12.12.08 17:42) [47]
У динамических массивов есть такая замечательная особенность как управление их жизнью со стороны компилятора, по типу интерфейсов в Delphi. Во многих случаях возможность не заниматься освобождением памяти облегчает жизнь и избавляет от глюков.
Поэтому и Java и C# пользуются популярностью, проигрывая нативным языкам во всем остальном. Повисший сервер это очень плохо, а на C++ или Delphi он до такой стабильности вылизывается годами.
-
> Sapersky (12.12.08 17:42) [47]
Да, я уже посмотрел. Все равно в мозгу мало ячеек памяти чтобы помнить что, где и как реализовано. Что опасно, а что нет. Привычка со старых времен.
-
Охрененный такой косячек в коде... lua_pop(FLUAState, 1); должно быть lua_pop(FLUAState, -1); Ну и соответственно где другие цифры, все равно - должен быть.
-
Еще косяк. pcall второй аргумент - это количество результатов. Он в моем коде всегда 0. Это не правильно. вернее для процедур это правильно. А вот функции должны указывать количество результатов, иначе нифига работать не будет.
-
> Сделал классовую обертку(может кому понадобится?).
Э-э-э вроде ж ketmar делал? Хотя, я чессно говоря не особо вник.
|