对于我的一个C ++编程分配,我必须在设计程序时考虑整数变量的大小。我在互联网上阅读,大多数地方都说“整数的大小取决于平台。”我不清楚这意味着什么,所以我在这里问。
是什么决定了原始数据类型的大小?
- 处理器架构(可以是指令集大小)。
- 操作系统
- 编译器
- 以上的组合。
选择一个大小为的整数是什么原因
2 byte
在一些系统中,和4 byte
在其他人?有什么理由不能继续2字节吗?
对于我的一个C ++编程分配,我必须在设计程序时考虑整数变量的大小。我在互联网上阅读,大多数地方都说“整数的大小取决于平台。”我不清楚这意味着什么,所以我在这里问。
是什么决定了原始数据类型的大小?
选择一个大小为的整数是什么原因 2 byte
在一些系统中,和 4 byte
在其他人?有什么理由不能继续2字节吗?
是什么决定了原始数据类型的大小?
这取决于编译器。编译器通常依赖于体系结构,处理器,开发环境等,因为它将它们考虑在内。所以你可能会说它是所有的组合。
选择一个整数在某些系统中的大小为2个字节,在其他系统中为4个字节的原因是什么?有什么理由不能继续2字节吗?
C ++标准没有以字节为单位指定整数类型的大小,但它指定了它们必须能够容纳的最小范围。您可以从所需范围推断出最小位数。您可以从中推断最小大小(以字节为单位)和值 CHAR_BIT
那个宏 定义一个字节中的位数 (除了最模糊的平台之外,它只有8,而且不能低于8)。
查看 这里 了解更多信息。
他们在这里意味着什么平台。
通常,它表示操作系统,编译器和编译器的一些特殊选项的组合。
是什么原因决定原始数据类型的大小。
那就是“上面的组合”。
顺便说一句,这被称为“记忆模型”或“数据模型”(不确定哪一个是正确的术语),你可以从中了解更多信息。 http://en.wikipedia.org/wiki/64-bit
看来你的第一个问题已经回答了,所以我会在第二个问题上做一个问题:
选择一个整数在某些系统中的大小为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位,所以你得到以下大小:
你可以打赌,如果我们进入128位操作系统,将会有一种数据类型(可能 unsigned long long
?)由16个字节组成。
从某种意义上说它是历史,但为什么建筑师会首先决定这些尺寸? 原因如下:
integer
任何更大的数据类型在大多数用例中都可能是浪费的,因为人们根本不需要用原始数据类型来计算那么高。integer
完全适合单个寄存器,因此大小通常受硬件限制(寄存器只是一个例子)。我确信有更聪明,更有经验的StackOverflow成员可以提供的其他原因:-)
在C中,int的大小是gcc(GNU编译器集合)中的4个字节,以及borland和turbo c编译器中的2个字节。最后两个编译器特定于Windows,而gcc编译器是Linux OS的编译器。 原始数据类型的大小基于编译器,这些编译器基本上特定于特定的OS。我个人更喜欢gcc编译器而不是其他编译器,因为它根据C语言的定义支持许多功能。其中一个例子是空指针。如果你在gcc中声明一个空指针并尝试在gcc中访问它,它会给你错误但turbo c允许使用它没有错误。