关于 arm 和 x86 架构的思考

举报
liuzhen007 发表于 2022/02/28 22:06:30 2022/02/28
【摘要】 ​目录前言在苹果 mac OS 系统上的实验在 Ubuntu 的系统上的实验结论前言一般来说,由于底层架构的不同,特别是指令集的不同,在 arm 机器上编译的程序放到 x86 机器上是不能执行的;同理,在 x86 机器上编译的程序放到 arm 机器上也是不能执行的。这也是我们一般的共同认知,但是今天却遇到了一个让我一度怀疑这个理论正确性的现象。在苹果 mac OS 系统上的实验今天突发奇想,...

目录


前言

在苹果 mac OS 系统上的实验

在 Ubuntu 的系统上的实验

结论



前言

一般来说,由于底层架构的不同,特别是指令集的不同,在 arm 机器上编译的程序放到 x86 机器上是不能执行的;同理,在 x86 机器上编译的程序放到 arm 机器上也是不能执行的。这也是我们一般的共同认知,但是今天却遇到了一个让我一度怀疑这个理论正确性的现象。

在苹果 mac OS 系统上的实验

今天突发奇想,打算验证一下不同架构上编译的程序是不是真的不可以跨平台使用。于是在比较老的 mac 本子(x86 架构)写了一段超级经典的代码,代码如下:

#include <stdio.h>
int main() {
    printf("hello world\n");
    return 0;
}

将上述代码保存为文件 hello.c,编译链接出可执行程序,命令如下:

gcc hello.c -o x86_hello

顺利的话会得到可执行文件 x86_hello,然后把这个文件拷贝到最新的搭载 m1 芯片的 mac 本子(arm 架构)上并执行,此时,神奇的一幕发生了,x86_hello 程序居然可以正常执行,输出:hello world

于是,我赶紧在 m1 本子上编译了相同的代码得到 arm_hello 可执行文件,然后拷贝到老旧的 x86 本子上并执行,却提示文件不可用,具体报错信息如下:

-bash: ./arm_hello: Bad CPU type in executable

貌似文章开头提到的共识受到了挑战? 


在 Ubuntu 的系统上的实验

为了验证是不是 arm 可以兼容 x86 的程序这个观点,于是,自己赶紧在 Ubuntu 的 x86 系统上编译了相同的代码,然后拷贝到 Ubuntu 的 arm 系统上并执行,得到的答案是失败。

于是,自己又在 Ubuntu 的 arm 系统上编译了相同的代码,然后拷贝到 Ubuntu 的 x86 系统上并执行,得到的答案也是失败。

结论

综上所述,arm 兼容 x86 的论断不成立。貌似原来的理论也没有问题,只是在 mac OS 系统上不太适用。说明苹果设计产品时做到了向后兼容,但是没有向前兼容。最后再一句:x86 架构采用 CISC(复杂指令集计算机),而 arm 架构采用 RISC(精简指令集计算机)。 



作者简介:😄大家好,我是 Data-Mining(liuzhen007),是一位典型的音视频技术爱好者,前后就职于传统广电巨头和音视频互联网公司,具有丰富的音视频直播和点播相关经验,对 WebRTC、FFmpeg 和 Electron 有非常深入的了解,😄公众号:玩转音视频。同时也是 CSDN 博客专家、华为云享专家(共创编辑)、InfoQ 签约作者,欢迎关注我分享更多干货!😄



【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。