我认为这个问题有两个部分:
允许原始类型的大小.
这由C和C++标准规定:类型允许它们必须具有的最小值范围,其隐含地以位为单位设置其大小的下限(例如,long
必须至少32位以符合标准).
标准没有指定字节大小,因为字节的定义取决于实现,例如char
是字节,但字节大小(CHAR_BIT
宏)可能是16位.
实现定义的实际大小.
正如其他答案已经指出的那样,这取决于实现:编译器.反过来,编译器实现受目标体系结构的严重影响.因此,有两个编译器在相同的操作系统和体系结构上运行,但具有不同的大小,这似乎是合理的int
.您可以做的唯一假设是标准规定的假设(假设编译器实现它).
还可能存在额外的ABI要求(例如,固定的枚举大小).
首先,它取决于编译器.编译器通常依赖于体系结构,处理器,开发环境等,因为它将它们考虑在内.所以你可能会说这是所有的组合.但我不会这么说.我会说,编译器,因为在同一台机器上你可能有不同大小的POD和内置类型,如果你使用不同的编译器.另请注意,您的源代码是输入到编译器的,因此编译器最终决定了POD和内置类型的大小.但是,这一决定也受到目标机器底层架构的影响.毕竟,真正有用的编译器必须发出最终在您定位的机器上运行的高效代码.
编译器也提供options
.其中很少可能影响尺寸!
的大小char
,signed char
并且unsigned char
是由C++标准本身定义!所有其他类型的大小由编译器定义.
C++ 03标准$ 5.3.3/1说,
sizeof(char),sizeof(signed char)和sizeof(unsigned char)是1; sizeof应用于任何其他 基本类型(3.9.1)的结果是实现定义的.[注意:特别是sizeof(bool)和sizeof(wchar_t)是实现定义的.69)
C99标准($ 6.5.3.4)本身也定义了大小char
,signed char
并且unsigned char
为1,但是留下了编译器定义的其他类型的大小!
编辑:
我发现这个C++ FAQ章节非常好.整章.这是一个非常小的篇章.:-)
http://www.parashift.com/c++-faq-lite/intrinsic-types.html
另外阅读下面的评论,有一些很好的论点!
归档时间: |
|
查看次数: |
9508 次 |
最近记录: |