int_least64_t против int_fast64_t против int64_t - PullRequest
31 голосов
/ 17 февраля 2012

Я пытаюсь перенести мой код на 64-битный.

Я обнаружил, что C ++ предоставляет 64-битные целочисленные типы, но я все еще не уверен в этом.

Сначала я нашел четыре разных 64-битных int с:

int_least64_t
int_fast64_t
int64_t
intmax_t

и их неподписанные аналоги. Я протестировал их, используя sizeof(), и они 8-байтовые, поэтому они 64-битные.

Что между ними? Что означает типы least и fast? А как насчет intmax_t?

Ответы [ 2 ]

60 голосов
/ 17 февраля 2012

На вашей платформе они являются именами одного и того же базового типа данных.На других платформах это не так.

int64_t должно быть ровно 64 бита.На архитектурах с (например) 9-битным байтом он вообще не будет доступен.

int_least64_t - это наименьший тип данных с как минимум 64 битами.Если int64_t доступно, оно будет использовано.Но (например) для 9-битной байтовой машины это может быть 72 бита.

int_fast64_t - это тип данных с как минимум 64 битами и наилучшей арифметической производительностью.Это в основном для согласованности с int_fast8_t и int_fast16_t, которые на многих машинах будут 32-битными, а не 8 или 16. Через несколько лет может появиться архитектура, в которой 128-битная математика быстрее, чем 64-битная, но я не думаю, что сегодня что-либо существует.


Если вы переносите алгоритм, вы, вероятно, захотите использовать int_fast32_t, поскольку он будет содержать любое значение вашего старого 32-битного кода.может справиться, но будет 64-битным, если это быстрее.Если вы конвертируете указатели в целые числа (почему?), Тогда используйте intptr_t.

13 голосов
/ 17 февраля 2012

int64_t имеет ровно 64 бита.Он может быть определен не для всех платформ.

int_least64_t - это наименьший тип, по крайней мере, с 64 битами.

int_fast64_t - это тип, который быстрее всего обрабатывается, по крайней мере с 64 бит.

На 32- или 64-битном процессоре все они будут определены и будут иметь 64-битные значения.На гипотетическом 73-битном процессоре int64_t не будет определен (так как не существует типа с точно 64-битным), а остальные будут иметь 73-битные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...