Конференция "Прочее" » Оценил простоту и мощь Lua
 
  • @!!ex © (12.12.08 16:51) [40]
    > [39] Mystic ©   (12.12.08 16:42)

    Приведите код с TStringList, сравним читабельность.
    Как уже говорилось выше - выделение блоками применятся(лично мной) там, где это актуально. Почему ЗДЕСЬ не актауально, уже объяснил.
  • Palladin © (12.12.08 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 (12.12.08 16:59) [42]
    Автор, вроде как, пишет на BDS, а там (начиная с 2006-го) проблема решена в корне - сам менеджер памяти (FastMM) перевыделяет память блоками, на манер TList. О чём, собственно, уже писали в [31].
    Хотя лично я, чтобы не зависеть от версий и менеджеров, предпочитаю самописную "шаманскую" функцию перевыделения.
  • Mystic © (12.12.08 17:27) [43]
    > Sapersky   (12.12.08 16:59) [42]

    Смотреть надо, какой минимальный размер блока, какой между ними шаг (постоянный/экспоненциальный), алгоритм перераспределения...
  • Городской Шаман (12.12.08 17:37) [44]

    > Mystic ©   (12.12.08 16:42) [39]


    А не проще ли поставить нормальный менеджер памяти, который об этом позаботится автоматически?

    FastMM - нет проблем! :)
  • Городской Шаман (12.12.08 17:41) [45]

    > Mystic ©   (12.12.08 17:27) [43]
    >
    > > Sapersky   (12.12.08 16:59) [42]
    >
    > Смотреть надо, какой минимальный размер блока, какой между
    > ними шаг (постоянный/экспоненциальный), алгоритм перераспределения.


    Угу написать имитационную программу в matlab и на ядро системы затратить 15 лет (Minix3), когда Linux, не говоря уже о тупой кривой и глюкавой винде (вспомним работоспособность Win95) вовсю господствуют на рынке.
  • clickmaker © (12.12.08 17:42) [46]
    > вспомним работоспособность Win95

    лучше 3.1
  • Sapersky (12.12.08 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://pda.delphimaster.net/?id=1226920476&n=0 )
  • Городской Шаман (12.12.08 17:44) [48]

    > Sapersky   (12.12.08 16:59) [42]
    >
    > Автор, вроде как, пишет на BDS, а там (начиная с 2006-го)


    Так ничего не мешает даже к Delphi5 подключить FastMM опционально. Или на Google ссылку не нашли?

    Извините, но когда мне понадобится оптимизация, а начну часть кода писать на assembler, там будет гораздо более эффективное распределение.
  • Городской Шаман (12.12.08 17:49) [49]

    > Sapersky   (12.12.08 17:42) [47]


    У динамических массивов есть такая замечательная особенность как управление их жизнью со стороны компилятора, по типу интерфейсов в Delphi. Во многих случаях возможность не заниматься освобождением памяти облегчает жизнь и избавляет от глюков.

    Поэтому и Java и C# пользуются популярностью, проигрывая нативным языкам во всем остальном. Повисший сервер это очень плохо, а на C++ или Delphi он до такой стабильности вылизывается годами.
  • Mystic © (12.12.08 18:20) [50]
    > Sapersky   (12.12.08 17:42) [47]

    Да, я уже посмотрел. Все равно в мозгу мало ячеек памяти чтобы помнить что, где и как реализовано. Что опасно, а что нет. Привычка со старых времен.
  • @!!ex © (14.12.08 17:45) [51]
    Охрененный такой косячек в коде...
    lua_pop(FLUAState, 1);


    должно быть
    lua_pop(FLUAState, -1);


    Ну и соответственно где другие цифры, все равно - должен быть.
  • @!!ex © (14.12.08 18:00) [52]
    Еще косяк. pcall второй аргумент - это количество результатов. Он в моем коде всегда 0. Это не правильно.
    вернее для процедур это правильно. А вот функции должны указывать количество результатов, иначе нифига работать не будет.
  • Kostafey © (18.12.08 01:45) [53]
    > Сделал классовую обертку(может кому понадобится?).

    Э-э-э вроде ж ketmar делал?
    Хотя, я чессно говоря не особо вник.
 
Конференция "Прочее" » Оценил простоту и мощь Lua
Есть новые Нет новых   [134449   +17][b:0][p:0.001]