64位的可执行程序比32位的大吗?

ooolinux 2021-01-31 01:01:15
64位的Windows ghost安装包比32位的大不少,是不是64位的可执行程序包括DLL比32位的大,大在什么地方呢?
...全文
391 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 10 楼 ooolinux 的回复:
[quote=引用 8 楼 早打大打打核战争 的回复:]

没有变为两倍,64位指令的默认操作数尺寸仍然是32位的,地址尺寸默认是64位的,但是直接编码到指令中的地址仍然只能32位(0扩展到64位地址),所以超过4GB的地址需要先装入到寄存器,不能硬编码到指令中。这样64位指令的平均长度比32指令长一些,但不是很多,大约长百分之十几。

64位指令的操作码和32位的有什么区别?[/quote]

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位指令长一些
ooolinux 2021-02-02
  • 打赏
  • 举报
回复
引用 12 楼 早打大打打核战争 的回复:
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位指令长一些

大概了解了。
xian0-666 2021-02-01
  • 打赏
  • 举报
回复
理论上来说64位系统是32位的2倍,一般32位系统最大支持内存位4G。64位操作系统理论上可以运行32位和64位软件,而32位操作系统只能运行32位的软件,如果电脑操作系统位数不同,那么代码中基本数据类型所占的字节也不同。如:32位平台下long long是8个字节(64位),而64位平台下,long 是8个字节(64位)
  • 打赏
  • 举报
回复
主要是因为64位windows也带了32位系统,当然就更大了。虽然64位指令平均长度比32位指令长一些,但是并不明显。
maguangzhi 2021-02-01
  • 打赏
  • 举报
回复
指针和int的sizeof应该更大了,所以存贮空间变大了。
ooolinux 2021-02-01
  • 打赏
  • 举报
回复
引用 9 楼 真相重于对错 的回复:
问题不准确,我写的64位的hello world程序肯定比32位的photoshop小
可执行文件与它的运行平台应该是相关的,比如windows程序和linux,安卓的肯定不一样,另外可执行文件不仅仅包括代码,还有资源,数据,不能简单的论证大小。
如果只是讨论windows平台,可以看看32位和64位pe文件格式是否一致。

说的是相同功能,win64位和32位的可执行程序。
ooolinux 2021-02-01
  • 打赏
  • 举报
回复
引用 8 楼 早打大打打核战争 的回复:
没有变为两倍,64位指令的默认操作数尺寸仍然是32位的,地址尺寸默认是64位的,但是直接编码到指令中的地址仍然只能32位(0扩展到64位地址),所以超过4GB的地址需要先装入到寄存器,不能硬编码到指令中。这样64位指令的平均长度比32指令长一些,但不是很多,大约长百分之十几。

64位指令的操作码和32位的有什么区别?
真相重于对错 2021-02-01
  • 打赏
  • 举报
回复
问题不准确,我写的64位的hello world程序肯定比32位的photoshop小 可执行文件与它的运行平台应该是相关的,比如windows程序和linux,安卓的肯定不一样,另外可执行文件不仅仅包括代码,还有资源,数据,不能简单的论证大小。 如果只是讨论windows平台,可以看看32位和64位pe文件格式是否一致。
  • 打赏
  • 举报
回复
引用 5 楼 ooolinux 的回复:
[quote=引用 1 楼 qybao 的回复:]个人觉得可能是64位支持一部分的32位程序(64位兼容32位),所以64位源代码比32位源代码多吧。


引用 3 楼 早打大打打核战争 的回复:
主要是因为64位windows也带了32位系统,当然就更大了。虽然64位指令平均长度比32位指令长一些,但是并不明显。

一条指令是不是分为命令字和数据两部分,数据部分是不是宽度变为两倍?[/quote]

没有变为两倍,64位指令的默认操作数尺寸仍然是32位的,地址尺寸默认是64位的,但是直接编码到指令中的地址仍然只能32位(0扩展到64位地址),所以超过4GB的地址需要先装入到寄存器,不能硬编码到指令中。这样64位指令的平均长度比32指令长一些,但不是很多,大约长百分之十几。

ooolinux 2021-02-01
  • 打赏
  • 举报
回复
引用 4 楼 xian0-666 的回复:
理论上来说64位系统是32位的2倍,一般32位系统最大支持内存位4G。64位操作系统理论上可以运行32位和64位软件,而32位操作系统只能运行32位的软件,如果电脑操作系统位数不同,那么代码中基本数据类型所占的字节也不同。如:32位平台下long long是8个字节(64位),而64位平台下,long 是8个字节(64位)

位数两倍,其它不成倍数吧?
ooolinux 2021-02-01
  • 打赏
  • 举报
回复
引用 2 楼 maguangzhi 的回复:
指针和int的sizeof应该更大了,所以存贮空间变大了。

这个跟exe的大小是什么关系呢?
ooolinux 2021-02-01
  • 打赏
  • 举报
回复
引用 1 楼 qybao 的回复:
个人觉得可能是64位支持一部分的32位程序(64位兼容32位),所以64位源代码比32位源代码多吧。


引用 3 楼 早打大打打核战争 的回复:
主要是因为64位windows也带了32位系统,当然就更大了。虽然64位指令平均长度比32位指令长一些,但是并不明显。

一条指令是不是分为命令字和数据两部分,数据部分是不是宽度变为两倍?
qybao 2021-01-31
  • 打赏
  • 举报
回复
个人觉得可能是64位支持一部分的32位程序(64位兼容32位),所以64位源代码比32位源代码多吧。

15,447

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧