c++ - 为什么 std::size_t 在 32 位系统上是 4 个字节,而 unsigned long long 在 32 位和 64 位系统上都是 8 个字节?

标签 c++

问题很简单。

在 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/

相关文章:

c++ - 为什么我可以获取字符串文字的地址,而不是整数文字的地址?

c++ - g++ 和 boost 中 regex_replace() 替换字符串中 '\' 的不同处理

c++ - 无法将参数 1 从 'char *' 转换为 'uint8_t *'

c++ - 强制虚拟方法表中的函数顺序?

c++ - new[] 在填充之前不会减少可用内存

c++ - MPI_File_read 错误

c++ - 在 C++ 中逐字读取反斜杠字符

c++ - Xcode可以识别C++中的类变量吗

c++ - 如何在 Linux 上的 C++ 中读取 JPEG 和 PNG 像素?

c++ - Cmake 找到库但没有找到符号