为了我的C++编程作业之一,我需要在设计程序时考虑整数变量的大小。我在互联网上读了一些资料,大多数地方都说“整数的大小取决于平台。” 我不清楚这是什么意思,所以我在这里问。
是什么决定了原始数据类型的大小?
- 处理器体系结构(可能是指令集大小)。
- 操作系统
- 编译器
- 以上三个因素的组合。
在某些系统中选择将整数的大小设为
2字节
,而在其他系统中设为4字节
的原因是什么?现在是否还有理由不能继续使用2字节?
为了我的C++编程作业之一,我需要在设计程序时考虑整数变量的大小。我在互联网上读了一些资料,大多数地方都说“整数的大小取决于平台。” 我不清楚这是什么意思,所以我在这里问。
是什么决定了原始数据类型的大小?
在某些系统中选择将整数的大小设为2字节
,而在其他系统中设为4字节
的原因是什么?现在是否还有理由不能继续使用2字节?
这里所说的平台是什么意思。
通常,它指的是操作系统、编译器以及编译器的一些特殊选项的组合。
是什么决定了原始数据类型的大小。
这将是“上述组合”。
顺便说一下,这被称为“内存模型”或“数据模型”(不确定哪个术语是正确的),您可以从http://en.wikipedia.org/wiki/64-bit了解更多信息。
CHAR_BIT
宏的值(它定义一个字节中的比特数,除了最不常见的平台外,它是8,并且不能小于8)。在C语言中,int类型的大小在gcc(GNU编译器集合)中为4字节,在Borland和Turbo C编译器中为2字节。后两个编译器是专门为Windows设计的,而gcc编译器则是Linux操作系统的编译器。 基本数据类型的大小取决于编译器,这些编译器基本上是针对特定操作系统的。我个人更喜欢gcc编译器,因为它支持很多C语言的定义功能之一是空指针。如果你在gcc中声明一个空指针并尝试在其中访问它,它会给你错误,但Turbo C允许使用它而不报错。
sizeof(int)
已经不再是2。在32位和64位操作系统中,sizeof(int)
为4。另外值得一提的是,Embarcadero(Borland的继承者)最新的C++Builder支持OSX和iOS的C++编译器,并且将来还会支持Android。 - Remy Lebeaucout << "Unsigned short: " << sizeof(unsigned short) << endl;
cout << "Unsigned int: " << sizeof(unsigned int) << endl;
cout << "Unsigned long: " << sizeof(unsigned long) << endl;
。
Unsigned short: 2
Unsigned int: 4
Unsigned long: 8
如果我们达到128位操作系统,你可以打赌会有一个数据类型(也许是unsigned long long
?)由16个字节组成。
那么,为什么架构师要决定这些大小呢?嗯,有几个原因:
integer
数据类型更大,那么可能会浪费,因为人们使用原始数据类型时不需要计数那么高。integer
完全适合单个寄存器中,因此大小通常受硬件限制(寄存器只是其中之一的例子)。我相信还有其他更聪明、更有经验的StackOverflow成员可以给出其他原因 :-)
sizeof(long)
的大小等于sizeof(int)
。虽然不保证sizeof(long)
大于sizeof(int)
,但C++标准规定sizeof(long) >= sizeof(int)
。 - Remy Lebeau