图片来自早些年某网站C语言视频课程。
一、寄存器的定义和用途
寄存器(Register)是中央处理器(简称“CPU”)的组成部分,用于暂时存放参与运算的数据
和运算结果。寄存器分为通用寄存器和特殊功能寄存器。通用寄存器参与算术/逻辑运算并且
保存运算结果。
二、通用寄存器的数据宽度(或称为“通用寄存器的大小”)
通用寄存器的数据宽度,主要取决于处理器(CPU)架构。
32位处理器中通用寄存器的数据宽度是32bit(4个字节)。
64位处理器中通用寄存器的数据宽度是64bit(8个字节)。
通用寄存器的数据宽度取决于计算机的机器字长。
计算机的机器字长是指计算机进行一次整数运算所能处理的二进制数据的位数。
根据机器字长,计算机大致可以分为两大类:32位机和64位机。
32位机是指一次能够运行32bit数据的计算机。
64位机是指一次能够运行64bit数据的计算机。
三、64位机的数据模型
目前,大多数计算机都是64位机。64位机有三种数据模型:LP64、ILP64、LLP64。
LP64:“L”代表long类型数据,“P”代表pointer类型数据,“LP64”代表long和pointer两种
类型数据占用64bit(8个字节),int类型数据默认是4个字节。
ILP64:“I”代表int类型数据,“L”代表long类型数据,“P”代表pointer类型数据,“ILP64”
代表int、long以及pointer三种类型数据都占用64bit(8个字节)。
LLP64:“LL”代表long long类型数据,“P”代表pointer类型数据,“LLP64”代表long long和
pointer两种类型数据都占用64bit(8个字节),int和long两种类型数据默认都是4个字节。
注释:1个字节由8个bit组成。字节是计算机存储的基本单位,bit是计算机存储的最小单位。
四、操作系统
常见的操作系统有三种:Windows、macOS、Linux
五、通用寄存器的数据宽度(或称“通用寄存器的大小”)与int类型数据之间的关系
在64位Windows操作系统中int类型数据占用4个字节。
在64位macOS操作系统中int类型数据占用4个字节。
在64位Linux操作系统中int类型数据占用8个字节。
int类型数据在内存中占用的字节数,受平台(32位机、64位机)以及操作系统(Windows、
macOS、Linux)的影响。
从根源上讲,64位Winows操作系统采用的数据模型是LLP64,意味着long long和pointer两种
类型的数据在内存中占用64bit(8个字节),而int和long两种类型的数据在内存中占用4个字节。
64位macOS操作系统采用的数据模型是LP64,意味着long和pointer两种类型的数据在内存中
占用64bit(8个字节),而int类型的数据在内存中占用4个字节。
64位Linux操作系统采用的数据模型是ILP64,意味着int、long和pointer三种类型的数据在内存中
占用64bit(8个字节)。
六、小结
64位Winows操作系统、64位macOS操作系统和64位Linux操作系统,这三者对应的通用寄存器
的数据宽度都是64bit(相当于8个字节)。但是,int类型数据在不同的操作系统中占用的字节数
可能是8个字节,也可能是4个字节。
因此,int类型数据在内存中占用的字节数不能代表寄存器的大小。