为啥 short int 和 int 在 32 位架构中具有相同的大小?
Posted
技术标签:
【中文标题】为啥 short int 和 int 在 32 位架构中具有相同的大小?【英文标题】:Why short int and int has same size in 32bit architectures?为什么 short int 和 int 在 32 位架构中具有相同的大小? 【发布时间】:2020-10-21 02:53:43 【问题描述】:#include <iostream>
int main()
std::cout << "bool:\t\t" << sizeof(bool) << " bytes\n";
std::cout << "char:\t\t" << sizeof(char) << " bytes\n";
std::cout << "wchar_t:\t" << sizeof(wchar_t) << " bytes\n";
std::cout << "char16_t:\t" << sizeof(char16_t) << " bytes\n";
std::cout << "char32_t:\t" << sizeof(char32_t) << " bytes\n";
std::cout << "short:\t\t" << sizeof(short) << " bytes\n";
std::cout << "int:\t\t" << sizeof(int) << " bytes\n";
std::cout << "long:\t\t" << sizeof(long) << " bytes\n";
std::cout << "long long:\t" << sizeof(long long) << " bytes\n";
std::cout << "float:\t\t" << sizeof(float) << " bytes\n";
std::cout << "double:\t\t" << sizeof(double) << " bytes\n";
std::cout << "long double:\t" << sizeof(long double) << " bytes\n";
return 0;
这将表明 int 和 short 在 32 位系统中具有相同的大小,但为什么呢? 布尔型 1 个字节 字符 1 个字节 wchar_t 1 字节 char16_t 2 个字节 char32_t 4 字节 短 2 个字节 整数 2 个字节 长 4 个字节 long long 8 字节 浮动 4 个字节 双 8 字节 长双 8 字节
【问题讨论】:
您的编译器、编译器版本、目标和编译器选项是什么? (本质上是 GCC 上-v
的输出)
在 32 位系统上不常见,但 C++ 仅保证 16 位 int
。见en.cppreference.com/w/cpp/language/types#Properties
在 32 位系统上,wchar_t
不应该是 1 字节,很少会看到 2 字节的 int
。您使用的是什么编译器,您的目标平台是什么?你确定你不是为 16 位编译吗?
【参考方案1】:
为什么 short int 和 int 在 32 位架构中具有相同的大小?
问问自己:为什么它们的尺寸不一样?语言标准为两种类型的范围指定了相同的最小限制,并允许它们具有相同的大小。在某些语言实现中就是这种情况。
请注意,并非所有语言实现(无论是否为 32 位)都如此,并且在某些(例如 x86 CPU 架构上)大小确实不同。
【讨论】:
【参考方案2】:语言定义对整数类型的大小和相对大小提出了一些要求。该标准不关心 32 位系统、64 位系统或您可能拥有的任何其他系统。
尺寸要求是:
char -- at least 8 bits
short -- at least 16 bits
int -- at least 16 bits
long -- at least 32 bits
long long -- at least 32 bits
相对大小要求是,在上面的列表中,每种类型必须至少与其前面的类型一样大。 (例如,如果 short
是 32 位,int
必须至少是 32 位)。
所以,就语言定义而言,short
和int
的大小当然可以相同。在许多系统上都是如此。
【讨论】:
以上是关于为啥 short int 和 int 在 32 位架构中具有相同的大小?的主要内容,如果未能解决你的问题,请参考以下文章