sizeof(void*)的大小到底由何决定?(个人理解)

编译器产生目标平台指令集决定的。譬如说x86就是4 byte,x64就是8 byte.


sizeof(void*)的含义就是获取一个指针的大小。
指针的本质就是内存地址,因此指针的大小和内存空间有关。
32位的机器内存空间是2G(windows系统),因此指针的大小必须是,凑个整数那就是32bit。
因此本质上说,sizeof(void*)和编译器目标平台的内存空间有关。


  1. 有的人说是由CPU位宽决定。其实有一种编译器称之为交叉编译器,就是一台机器给另外一台架构完全不同的机器编译程序,比如Intel 64位的机器编译的程序在ARM 32位的设备上运行。这里的ARM 32位称之为目标操作系统。
  2. 说取决于cpu 是不准确的: AMD64 cpu 是64位的,64位虚拟地址. 可以在上面运行64位 Windowst 、32位 Windowst、 DOS(16bit)。
  3. 取决于操作系统也是不准确的 :64位 Windows 可以支持 32位应用程序 和 16位 DOS 程序 。
  4. 取决于编译器基本正确。但是一种编译器可以为多个目标平台生成代码。
  5. 所以取决于编译器目标平台的ABI


应该是目标平台的 软件约定 , ABI (应用程序二进制接口,调用约定,类型表示和名称修饰)属于软件约定 的一个子集


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值