Когда / где / почему size_t не является uint?

Я получаю много критики за использование uint вместо size_t, но каждый раз, когда я проверяю набор инструментов, с которым я работаю, получается size_t определяется как uint,

Есть ли реализации компилятора, где size_t на самом деле не uint? Каковы основания для этой критики?

1 ответ

Решение

size_t это "размер, соответствующий максимально возможному диапазону адресов, который вы можете использовать в аппарате" (или несколько слов для приблизительного эффекта).

Особенно, size_t будет 64 бита на 64-битной машине и 32 бита в 32-битной системе.

Я предполагаю, что uint не хватает unsigned int, что в значительной степени универсально 32 бита (в наши дни некоторые старые системы будут использовать 16-битные целые числа). Так что в 64-битной системе unsigned int будет по-прежнему 32 бита, хотя объем памяти, строки и т. д. могут быть больше 32-битных - что может вызвать проблемы, если вы пытаетесь использовать uint для размера.

Другие вопросы по тегам