gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 18:18:25 45 4
gpt4 key购买 nike

问题很简单。

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

45 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com