[quote=引用 8 楼 早打大打打核战争 的回复:] 没有变为两倍,64位指令的默认操作数尺寸仍然是32位的,地址尺寸默认是64位的,但是直接编码到指令中的地址仍然只能32位(0扩展到64位地址),所以超过4GB的地址需要先装入到寄存器,不能硬编码到指令中。这样64位指令的平均长度比32指令长一些,但不是很多,大约长百分之十几。
32位指令和大部分16位指令在64位模式下是可以原样使用的,编码也没有改变,因为64位模式下指令的默认操作数尺寸仍然是32位的,所以如果操作数尺寸变成64位就要附加前缀,比如xor eax, eax在32位和64位模式下的编码都是33 c0(也可以是31 c0,x86指令集编码方式的一个副作用),但是64位的xor rax, rax则是48 33 c0,所以64位指令的平均长度要比32位指令长一些
问题不准确,我写的64位的hello world程序肯定比32位的photoshop小 可执行文件与它的运行平台应该是相关的,比如windows程序和linux,安卓的肯定不一样,另外可执行文件不仅仅包括代码,还有资源,数据,不能简单的论证大小。 如果只是讨论windows平台,可以看看32位和64位pe文件格式是否一致。
没有变为两倍,64位指令的默认操作数尺寸仍然是32位的,地址尺寸默认是64位的,但是直接编码到指令中的地址仍然只能32位(0扩展到64位地址),所以超过4GB的地址需要先装入到寄存器,不能硬编码到指令中。这样64位指令的平均长度比32指令长一些,但不是很多,大约长百分之十几。
[quote=引用 1 楼 qybao 的回复:]个人觉得可能是64位支持一部分的32位程序(64位兼容32位),所以64位源代码比32位源代码多吧。
主要是因为64位windows也带了32位系统,当然就更大了。虽然64位指令平均长度比32位指令长一些,但是并不明显。
理论上来说64位系统是32位的2倍,一般32位系统最大支持内存位4G。64位操作系统理论上可以运行32位和64位软件,而32位操作系统只能运行32位的软件,如果电脑操作系统位数不同,那么代码中基本数据类型所占的字节也不同。如:32位平台下long long是8个字节(64位),而64位平台下,long 是8个字节(64位)
指针和int的sizeof应该更大了,所以存贮空间变大了。
个人觉得可能是64位支持一部分的32位程序(64位兼容32位),所以64位源代码比32位源代码多吧。
15,447
社区成员
58,120
社区内容
加载中
试试用AI创作助手写篇文章吧