Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.02.15;
Скачать: CL | DM;

Вниз

Оценил простоту и мощь 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;
Скачать: CL | DM;

Наверх




Память: 0.56 MB
Время: 0.019 c
15-1229637458
Kostafey
2008-12-19 00:57
2009.02.15
Восстановление Windows


15-1229593039
KSergey
2008-12-18 12:37
2009.02.15
Б.Шнайер. Прикладная криптография. Нужна бумажная.


2-1231405184
FEV
2009-01-08 11:59
2009.02.15
Работает ли внешняя программа?


2-1230991906
demon
2009-01-03 17:11
2009.02.15
Падсказка над иконкой в трее


2-1230325419
programmer90
2008-12-27 00:03
2009.02.15
Хочу большие String-и:)