楼上说的没啥问题,因为可执行文件是编译器生成的,所以可执行文件的任何行为都是编译器决定的..
不是CPU决定的,在32位CPU上,64位操作系统中运行64位应用程序,指针的大小一定是8字节
不是操作系统决定的,在64位操作系统运行32位应用程序,指针大小一定是4字节
想弄清这个问题,要明白指针大小和什么有关
指针的大小决定寻址的范围,或者说就是内存可表示的大小,不管代码还是数据都存放于内存中,所以寻址的范围就是内存的范围
在32位环境中 内存范围是 0000 ~
0xffffffff也就是 0 到4GB(2^32),这也是为什么32位操作系统理论最大内存只能有4GB
指针长度由 可执行文件的目标CPU类型 决定,这个存储在PE头中偏移+4的位置
其实就是这2个字节决定应用程序的目标CPU类型
12楼的测试应该是有问题的
试试
int a;
int *p = &a;
sizeof(p);
另外sizeof是硬编码进去的,也就是说是编译时决定而不是运行时决定,所以要配置好编译器的预处理选项
[
本帖最后由 yxwsbobo 于 2010-8-23 19:35 编辑 ]