Пару дней назад случайно наткнулся на очередной тест производительность C++ и все остальные и решил попробовать написать числодробительную функцию для маленькой проверки. После ее написания нахожусь в некотором шоке, код выглядит так:
Код: Выделить всё
for (int i = 0; i < 1000000000; i++) {
double d = exp(-2);
}
Попробовал скомпилировать этот код с ключом -О2 и без него, так вот с ключом выполнение этой "программки" занимает примерно 350мс, а без ключа примерно 3-4 секунды. Пробовал то же на Java, не дождался. А теперь вопрос это что правда скорость увеличилась в 10 раз с ключом или я что-то не так сделал? Работало это все на openSUSE 11.1 x86_64, gcc из репозитория, процессор intel t2390.
И еще вопрос, если я менял тип int на int64_t, то можно было еще пару ноликов написать, а время выполнения с ключом не менялась, но увеличивалось время выполнения без ключа и доходило до отрыва в скорости примерно в 20 раз. Как такое может быть? Реально ли увеличится скорость программы если основные операции в ней --- это вычисление экспоненты, взятие значения из HashMap'а и запись новых туда же, если я перепишу ее с Java на C++?