Есть ли преимущество в использовании старого стиля ʻobject` вместо `class `in Delphi?

В 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 байтов.

Другие оптимизации

  • удаление рекурсии
  • оптимизация кеша
  • использование встроенного
  • предварительного расчета хэшей (аналогично радужным таблицам)
  • обнаружение патологических случаев и использование алгоритма отката
  • использование графического процессора

10
задан Johan - reinstate Monica 24 May 2011 в 10:26
поделиться