问题很简单。
在 32 位系统上:
std::cout << sizeof(unsigned int); //4
std::cout << sizeof(unsigned long long); //8
std::cout << sizeof(std::size_t); //4
在 64 位系统上:
std::cout << sizeof(unsigned int); //4
std::cout << sizeof(unsigned long long); //8
std::cout << sizeof(std::size_t); //8
我只检查了 MSVC 的实现,它看起来像这样:
#ifdef _WIN64
typedef unsigned __int64 size_t;
#else
typedef unsigned int size_t;
#endif
那么为什么不在 32 位和 64 位系统上制作 std::size_t
unsigned long long
(std::uintmax_t
)支持吗?还是我错了?
最佳答案
size_t
的要点是能够容纳最大可能对象的大小。在 32 位系统上,任何对象都不能占用超过 2**32 字节,因此 32 位类型就足够了。
使用 64 位类型会浪费空间,而且运行时可能会更昂贵。
关于c++ - 为什么 std::size_t 在 32 位系统上是 4 个字节,而 unsigned long long 在 32 位和 64 位系统上都是 8 个字节?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34472602/