由编译器产生的目标平台的指令集决定的。譬如说x86就是4 byte,x64就是8 byte.
sizeof(void*)的含义就是获取一个指针的大小。
指针的本质就是内存地址,因此指针的大小和内存空间有关。
32位的机器内存空间是2G(windows系统),因此指针的大小必须是,凑个整数那就是32bit。
因此本质上说,sizeof(void*)和编译器目标平台的内存空间有关。
- 有的人说是由CPU位宽决定。其实有一种编译器称之为交叉编译器,就是一台机器给另外一台架构完全不同的机器编译程序,比如Intel 64位的机器编译的程序在ARM 32位的设备上运行。这里的ARM 32位称之为目标操作系统。
- 说取决于cpu 是不准确的: AMD64 cpu 是64位的,64位虚拟地址. 可以在上面运行64位 Windowst 、32位 Windowst、 DOS(16bit)。
- 取决于操作系统也是不准确的 :64位 Windows 可以支持 32位应用程序 和 16位 DOS 程序 。
- 取决于编译器基本正确。但是一种编译器可以为多个目标平台生成代码。
- 所以取决于编译器目标平台的ABI
应该是目标平台的
软件约定 , ABI (应用程序二进制接口,调用约定,类型表示和名称修饰)属于软件约定 的一个子集