Недавно в буржуинской переписке промелькнуло, что операции с 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 производятся через мат.сопроцессор, а он — достойный помощник основному ядру проца.