Недавно в буржуинской переписке видал, что операции с ULONG медленнее чем с LONG в 100-200 раз.

Недавно в буржуинской переписке промелькнуло, что операции с ULONG медленнее чем с LONG в 100-200 раз. И предполагается что это потому что базовый тип для ULONG есть DECIMAL. И вот вопросик (вероятно к Олегу 🙂 ) Что вы думаете по этому поводу? Действительно ли Decimal  базовый тип для Ulong?

Да, это так. Правда там несколько не так. Как и при работе со строками, для работы с переменными типа ULONG и DECIMAL используется спец. стек. Т.е., например, для выполнения такого кода UlongVar += 1 компилятор генерит код, в котором вызываются четыре стековые функции.

А насчет скорости выполнения — считайте сам. Тест для простого инкремента (Var += 1):

LONG примем за единицу, тогда для других типов увеличение времени обработки будет соответственно:

ULONG   — ~150 раз
DECIMAL — ~100 раз
REAL    — ~2 раза    !!!

Как видно ULONG — самый медленный. Медленнее даже чем DECIMAL! А вот от REAL, если честно я такой прыти не ожидал! Хотя чего удивляться — все операции с REAL производятся через мат.сопроцессор, а он — достойный помощник основному ядру проца.