Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 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
15-1229486454
Slider007
2008-12-17 07:00
2009.02.15
С днем рождения ! 17 декабря 2008 среда


3-1215351058
Kolan
2008-07-06 17:30
2009.02.15
LIKE в SQLite или как без него обойтись.


3-1214981326
Erick
2008-07-02 10:48
2009.02.15
Сортировка строкового поля как числового(D10/FoxPro/ADO)


2-1231148439
***mikle***
2009-01-05 12:40
2009.02.15
Изменение длины динамического массива внутри процедуры.


15-1229579107
AIK
2008-12-18 08:45
2009.02.15
Дубликат сайта что ли?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский