Стандарт C не совсем ясен в отношении семейства типов uint_fast * _t
. В системе gcc-4.4.4 linux x86_64 типы uint_fast16_t
и uint_fast32_t
имеют размер 8 байтов. Однако умножение 8-байтовых чисел кажется довольно медленным, чем умножение 4-байтовых чисел. Следующий фрагмент кода демонстрирует это:
#include <stdio.h>
#include <stdint.h>
#include <inttypes.h>
int
main ()
{
uint_least16_t p, x;
int count;
p = 1;
for (count = 100000; count != 0; --count)
for (x = 1; x != 50000; ++x)
p*= x;
printf("%"PRIuLEAST16, p);
return 0;
}
Выполняя команду time в программе, я получаю
real 0m7.606s
user 0m7.557s
sys 0m0.019s
Если я изменю тип на uint_fast16_t
(и модификатор printf), время станет
real 0m12.609s
user 0m12.593s
sys 0m0.009s
Итак, не будет ли это намного лучше если заголовок stdint.h определил uint_fast16_t
(а также uint_fast32_t) как 4-байтовый тип?