微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么对二进制文件的解释如此混乱?

如何解决为什么对二进制文件的解释如此混乱?

看,这是一个 C++ 程序,只是打个招呼。 Cpp program that just says hi

解决方法

源代码描述的是程序的行为,而不是执行任务的指令序列。编译器获取行为描述,并假设优化被打开,生成最佳指令列表来执行它可以执行的任务。编译器要求的优化级别越高,编译器为寻找更有效的解决方案付出的努力就越多。

多亏了 As-If Rule,编译器可以做任何它想要的代码来生成最高效的程序,只要源代码描述的任何可观察行为都没有改变1。您可能会发现整条代码都消失了,因为它们没有可观察的结果,或者可观察的结果被解析为编译器可以预先计算和存储的常量。

编译器完成后,输出应该看起来像输入经过搅拌机。

至于为什么二进制输出是一团糟,那是二进制,宝贝。它并不意味着人类可读。另一方面,计算机喜欢这些东西。

1 请注意,无行为改变规则有一些例外,例如 copy elision

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。