什么决定了原始数据类型的大小? [重复]

问题描述 投票:0回答:4

对于我的一项 C++ 编程作业,我在设计程序时必须考虑整数变量的大小。我在互联网上阅读,大多数地方都说“整数的大小取决于平台”。我不太明白这是什么意思,所以在这里问。

  1. 什么决定了原始数据类型的大小?

    • 处理器架构(可能是指令集大小)。
    • 操作系统
    • 编译器
    • 以上的组合。
  2. 在某些系统中选择大小为

    2 byte
    的整数,而在其他系统中选择大小为
    4 byte
    的整数的原因是什么?有什么原因不能再继续处理 2 字节吗?

c++ c memory types
4个回答
6
投票

他们在这里指的平台是什么。

通常是指操作系统、编译器以及编译器的一些特殊选项的组合。

决定原始数据类型大小的原因。

这将是“以上的组合。”


顺便说一句,这被称为“内存模型”或“数据模型”(不确定哪个是正确的术语),您可以从http://en.wikipedia.org/wiki/64-了解更多信息一点


5
投票

什么决定了原始数据类型的大小?

这取决于编译器。编译器通常又取决于架构、处理器、开发环境等,因为它会将它们考虑在内。所以你可能会说这是所有的组合。

在某些系统中选择整数大小为 2 字节,而在其他系统中选择 4 字节大小的原因是什么?有什么原因不能再继续处理 2 字节吗?

C++ 标准没有指定整型类型的大小(以字节为单位),但指定了它们必须能够容纳的最小范围。您可以从所需的范围推断出最小大小(以位为单位)。您可以从中推断出最小大小(以字节为单位)以及

CHAR_BIT
宏的值,该宏定义字节中的位数(在除最晦涩难懂的平台之外的所有平台中,它都是 8,并且不能小于 8) .

查看此处了解更多信息。


1
投票

看来您的第一个问题已经得到解答,所以我将尝试第二个问题:

在某些系统中选择整数大小为 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 位
  • 无符号整数:32位
  • 无符号长整型:64 位

你可以打赌,如果我们使用 128 位操作系统,将会有一个由 16 个字节组成的数据类型(也许

unsigned long long
?)。

所以从某种意义上说这是历史,但是为什么建筑师要决定这些尺寸呢? 嗯,有几个原因:

  1. “它足够大”计算机科学家喜欢只做他们需要做的事情,因此在大多数用例中,任何更大的数据类型都可能是浪费,因为人们根本不需要用原始数据类型。
    “它尽可能大”您希望 
  2. integer
  3. 完全适合单个寄存器,因此大小通常受硬件限制(寄存器只是一个示例)。
    
    
    
  4. 我确信更聪明、更有经验的 StackOverflow 成员还可以给出其他理由 :-)


1
投票

© www.soinside.com 2019 - 2024. All rights reserved.