什么决定了基本数据类型的大小
What determines the size of primitive data types?
对于我的一个c++编程作业,我必须在设计程序时考虑整数变量的大小。我在网上看了一下,大多数地方都说"整数的大小取决于平台。"我不清楚这是什么意思,所以我在这里问。
-
是什么决定了原始数据类型的大小?
- 处理器架构(可能是指令集大小)。
- 操作系统 编译器
- 以上组合。
-
为什么在某些系统中选择一个整数作为
2 byte
s的大小,而在其他系统中选择一个整数作为4 byte
s的大小?有什么原因使它不能继续2字节了吗?
他们在这里指的是什么平台
通常是指操作系统、编译器和编译器的一些特殊选项的组合。
决定原始数据类型大小的原因。
应该是"Combination of above"
顺便说一下,这被称为"内存模型"或"数据模型"(不确定哪个是正确的术语),您可以从http://en.wikipedia.org/wiki/64-bit
什么决定了原始数据类型的大小?
取决于编译器。反过来,编译器通常取决于体系结构、处理器、开发环境等,因为它要考虑到这些因素。所以你可以说它是所有的组合。
为什么在某些系统中选择2字节的整数,而在其他系统中选择4字节的整数?有什么原因使它不能继续2字节了吗?
c++标准没有指定整型的字节大小,但它指定了整型必须能够容纳的最小范围。您可以从所需的范围中推断最小大小(以位为单位)。你可以从中推断出最小的字节大小,以及定义字节中位数的CHAR_BIT
宏的值(除了最模糊的平台,它是8,不能小于8)。
查看更多信息
看来你的第一个问题已经得到了回答,所以我将尝试回答第二个问题:
为什么在某些系统中选择2字节的整数,而在其他系统中选择4字节的整数?是否有任何原因使它不能继续使用2字节?
这归结为架构(或编译器等)设计者的意见。通常,内存地址表示为unsigned integer
数据类型。因此,您得到了integer
大小的有趣历史,它反映了操作系统中地址的大小。也就是说,这真的不是巧合:
cout << "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
因为一个字节是8位,你得到以下大小:
- 无符号短:16位
- Unsigned int: 32位
- Unsigned long: 64位
你可以很好地打赌,如果我们进入128位操作系统,将会有一个由16字节组成的数据类型(可能是unsigned long long
?)
所以从某种意义上说,这是历史,但是为什么建筑师要决定这些尺寸呢?有几个原因:
- 计算机科学家喜欢只做他们需要做的事情,所以
- "It's as big as we can get"您希望
integer
完全适合单个寄存器,因此大小通常受硬件限制(寄存器只是一个例子)。
integer
数据类型更大可能在大多数用例中是浪费的,因为人们根本不需要用原始数据类型计算那么高。我相信还有其他更聪明,更有经验的StackOverflow成员可以给出的原因:-)
在C语言中,int的大小在gcc(GNU编译器集合)中是4字节,在borland和turbo C编译器中是2字节。最后两个编译器是特定于windows和gcc编译器是Linux操作系统的编译器。基本数据类型的大小取决于编译器,这些编译器基本上是针对特定的操作系统。与其他编译器相比,我个人更喜欢gcc编译器,因为根据C语言的定义,它支持许多功能。其中一个例子是空指针。如果你在gcc中声明了一个空指针,并试图在gcc中访问它,它会给你一个错误,但turbo c允许使用它没有错误。
- 防止主数据类型C++的隐式转换
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 在C++中打印指向不同基元数据类型的指针的内存地址
- C++浮点数据类型和字符串数据类型无法子到模板函数中
- 如何计算数据类型的范围,例如int
- int数据类型的指针指向的是什么,如果是一个类的私有数据成员,我们创建了该类的两个对象?
- 如果用户不小心给出了不正确的数据类型,cin 如何工作?
- 如果一个变量在它之前释放了另一个(相同的数据类型)变量,如何将其分配给内存?
- C++11 标准中的哪一部分规定了基元数据类型大小之间的相对顺序?
- 澄清了双精度数据类型的使用
- 为什么即使从未使用了数据类型,为什么还不够
- 类中的静态函数给出了错误:声明中的两种或多个数据类型
- ATL ActiveX DLL 作为映射类型图像和数据加载了两次
- Oracle 11gR1或R2客户端上是否设置了在ODBC API调用中将SELECT COUNT(*)返回的数据类型从
- 混淆了double和float数据类型
- Boost是否提供了打印uBLAS数据类型的工具?
- 数据中嵌入了多种类型
- 根据什么决定任何数据类型的大小和范围
- 什么决定了基本数据类型的大小
- 什么决定了boost::asio中TCP数据包的数量