Главная страница
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.017 c
15-1229516250
Knight
2008-12-17 15:17
2009.02.15
У меня тоже дочька завтра родится... три месяца назад.


11-1196708262
Artlav
2007-12-03 21:57
2009.02.15
RichEdit и подсветка


2-1230627520
LDV
2008-12-30 11:58
2009.02.15
SystemMenu


4-1202733177
JohnJ
2008-02-11 15:32
2009.02.15
управление программой, написанной на labview


2-1230975469
rik
2009-01-03 12:37
2009.02.15
Ado connected