В Delphi нормальном люди используют класс
для определения объектов.
В Turbo Pascal для Windows мы использовали объект
, и сегодня вы все еще можете использовать объект
для создания объекта.
Разница в том, что объект
живет в стеке, а класс
живет в куче.
И, конечно, объект
обесценивается.
Если отбросить все это в сторону:
есть ли преимущество, связанное со скоростью, используя объект
вместо класса?
Я знаю, что объект
не работает в Delphi 2009, но у меня есть особый вариант использования 1) , где скорость имеет значение, и я пытаюсь выяснить, может ли использование объекта
сделать мою работу быстрее, не создавая ошибок
Эта кодовая база находится в Delphi 7, но я могу перенести ее на Delphi 2007, еще не решил.
1) Игра жизни Конвея
Длинный комментарий
Спасибо всем за указание на меня. в правильном направлении.
Позвольте мне объяснить немного больше. Я пытаюсь ускорить реализацию hashlife , см. Также здесь или здесь для простого исходного кода.
Текущий рекордсмен - госпожа , но, боже, использует прямой перевод исходного кода Lisp Билла Госфера (который великолепен, поскольку алгоритм, но совсем не оптимизированный на микроуровне). Hashlife позволяет рассчитать поколение за время O (log (n)).
Он делает это, используя компромисс между пространством и временем. И по этой причине hashlife требует много памяти, гигабайты не редкость. В свою очередь, вы можете рассчитать поколение 2 ^ 128 (340282366920938463463374607431770000000), используя поколение 2 ^ 127 (170141183460469231731687303715880000000) за время o (1).
Поскольку hashlife необходимо вычислять хэши для всех подшаблонов, которые встречаются в более крупном шаблоне, распределение объектов должно быть быстрым.
Вот решение, на котором я остановился:
Оптимизация распределения
Я выделяю один большой блок физической памяти (настраивается пользователем), скажем, 512 МБ. Внутри этого блоба я размещаю то, что я называю стеками сыра . Это обычная стопка, когда я нажимаю и хлопаю, но хлопок также может быть из середины стопки. В таком случае я отмечаю его в списке свободных
(это нормальный стек). При нажатии я сначала проверяю список свободных
, если ничего не освободилось, я нажимаю как обычно. Я буду использовать записи, как и было рекомендовано, это похоже на решение с наименьшими накладными расходами.
Из-за того, как работает hashlife, выполняется очень мало pop
ping и много push
es. Я храню отдельные стеки для структур разного размера, следя за тем, чтобы доступ к памяти был выровнен по границам 4/8/16 байтов.
Другие оптимизации
встроенного