C++代码和可执行程序在x86和arm上的区别介绍

 更新时间:2022年07月18日 11:28:29   作者:zhangrelay  
这篇文章主要介绍了C++代码和可执行程序在x86和arm上的区别,X86和ARM是占据CPU市场的两大处理器,各有优劣,本文给大家详细介绍了两者的区别,需要的朋友可以参考下

从使用上来看,可执行程序肯定是不通用的。

armx86

生成的可执行程序大小都有差异呢。 

但是,如果源码编译,如果环境类似,相同的源码可以直接移植。

例如:如下程序👇donut.cpp

#include <stdio.h>
#include <math.h>
#include <cstring>
#include <unistd.h>
 
int main() {
    float A = 0, B = 0;
    float i, j;
    int k;
    float z[1760];
    char b[1760];
    printf("\x1b[2J");
    for (;;) {
        memset(b, 32, 1760);
        memset(z, 0, 7040);
        for (j = 0; j < 6.28; j += 0.07) {
            for (i = 0; i < 6.28; i += 0.02) {
                float c = sin(i);
                float d = cos(j);
                float e = sin(A);
                float f = sin(j);
                float g = cos(A);
                float h = d + 2;
                float D = 1 / (c * h * e + f * g + 5);
                float l = cos(i);
                float m = cos(B);
                float n = sin(B);
                float t = c * h * g - f * e;
                int x = 40 + 30 * D * (l * h * m - t * n);
                int y = 12 + 15 * D * (l * h * n + t * m);
                int o = x + 80 * y;
                int N = 8 * ((f * e - c * d * g) * m - c * d * e - f * g - l * d * n);
                if (22 > y && y > 0 && x > 0 && 80 > x && D > z[o]) {
                    z[o] = D;
                    b[o] = ".,-~:;=!*#$@"[N > 0 ? N : 0];
                }
            }
        }
        printf("\x1b[H");
        for (k = 0; k < 1761; k++) {
            putchar(k % 80 ? b[k] : 10);
            A += 0.00004;
            B += 0.00002;
        }
        usleep(30000);
    }
    return 0;
}

效果一致。 

编译过程都是:

g++ donut.cpp -o donut

生成文件大小:

arm→13.5 KB (13,856.00 字节)

x86→ 16.0 KB (16,384 字节)

很多软件都支持多平台,但是类似如下:

这些都是x86案例,并不支持arm。

支持arm会单独列出来。 

ARM 与 X86 的概述

X86 指 Intel 处理器家族,从 8086 开始,随后发布 80186、80286、80386、80486、Pentium 和 Xeon 等。X86 中的 86 表示其早期处理器的最后 2 位数字。

ARM 最初由 ARM Holdings 以 Acorn RISC Machine 起家,开发了 ARM、ARM2 32 位处理器,其晶体管数量最少,功耗/散热更低。 X86 主导台式机、工作站、笔记本电脑和服务器市场,最初的芯片是 16 位,后来的版本是 32 位和 64 位。

ARM 在速度和长电池寿命方面超过了英特尔处理器。 与 Apple 和 VLSI 合作推出了一家新公司 Advanced RISC Machines。 ARM 处理器广泛用于移动设备。

X86和ARM是占据CPU市场的两大处理器,各有优劣。

它们可以在某些关键方面进行比较,例如它们采用的指令集、功耗、软件和应用程序。

指令系统

ARM 处理器属于精简指令集计算 (RISC) 架构。
指令集架构 (ISA) 定义了处理指令、访问内存、管理 IO 的方式,并将处理器与程序员连接起来以生成高效的代码。
RISC 是同类中最新的一种,其中活动被拆分(简化)为简单指令,一条指令在一个时钟周期内执行,数百万条此类指令在一秒钟内以更快的速度处理。
虽然它必须执行多条指令,但由于其强大的处理器和流水线,整体速度更高。

X86 处理器遵循复杂指令集计算 (CISC) 架构。
复杂的指令在多个时钟周期中的单个步骤中处理。它使用可用内存在一个步骤中处理多条指令,更注重处理效率。
它使用更多的寄存器来完成多个任务,实现了高吞吐量和性能。

能量消耗

ARM 处理器一次执行一条指令,它需要较少的硬件。与其他处理器相比,该处理器使用的寄存器没有更少。因此,它消耗的电量更少,使用该处理器的设备的电池寿命更长。它还产生较少的热量。 ARM 使用更多内存来处理多条指令。即使使用 GPU 和其他外围设备,它也会消耗 5W 的功率。

X86 处理器更注重性能和高吞吐量,它使用更多的寄存器来实现它。因此,这里的功耗和热量产生更多。 Intel i7 是一款高端处理器,功耗为 130w。
ARM 处理器因其较低的功耗和较长的电池寿命而成为移动设备的首选,这对于为任何应用程序选择 CPU 至关重要。
始终连接到可靠电源的设备无需担心功耗,因此台式机、笔记本电脑和服务器使用 X86 以提高效率,但代价是高功耗。

软件

配备 ARM Process 的设备可在专为 ARM 开发的 Android 操作系统上运行。台式机、笔记本电脑和服务器在为 X86 处理器开发的 Unix、Linux 和 Windows 等操作系统上运行。
一些接口软件允许任何操作系统在任何设备上运行,但基于 ARM 的系统在为 X86 开发的某些操作系统中运行存在限制。
由于 ARM 的流行,微软发布了新版本的 windows for ARM。

应用

处理器的选择取决于计算机将用于的应用程序。对于 IOT 应用,ARM 处理器是正确的选择,因为嵌入式系统需要连接到所有设备,而且它应该有点小。
如果某些应用需要具有成本节约动机的单板计算机,ARM 是最佳选择。对于不需要特殊显示器的节俭应用,ARM 是理想的选择。需要强大平台 X86 的应用程序是正确的选择。

到此这篇关于C++代码和可执行程序在x86和arm上的区别的文章就介绍到这了,更多相关C++ x86和arm区别内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C++开发截屏小程序功能

    C++开发截屏小程序功能

    这篇文章主要介绍了C++开发截屏小程序功能,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-04-04
  • C++语言设计实现五子棋

    C++语言设计实现五子棋

    这篇文章主要为大家详细介绍了C++语言设计实现五子棋,包括数据结构和对象设计及主函数调用实现,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-09-09
  • VS2022设置编码方式为utf-8的三种方式小结

    VS2022设置编码方式为utf-8的三种方式小结

    本文主要介绍了VS2022设置编码方式为utf-8的三种方式小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-09-09
  • 深入理解c++指针的指针和指针的引用

    深入理解c++指针的指针和指针的引用

    下面小编就为大家带来一篇深入理解c++指针的指针和指针的引用。小编觉得挺不错的,现在就分享给大家,也给大家做个参考,一起跟随小编过来看看吧
    2016-06-06
  • C++如何在变量前面加#

    C++如何在变量前面加#

    这篇文章主要介绍了C++如何在变量前面加#问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • 详解C++ OpenCV实现图像拼接的原理及方法

    详解C++ OpenCV实现图像拼接的原理及方法

    本文以实现图像拼接为目标,把分割开的图像进行拼接还原,核心的内容包括:OpenCV图像拼接相关原理以及OpenCV图像拼接案例的实现,感兴趣的可以了解一下
    2022-07-07
  • C++实现判断字符串是否回文实例解析

    C++实现判断字符串是否回文实例解析

    这篇文章主要介绍了C++实现判断字符串是否回文,其中采用了数据结构中栈以及过滤字符等技术,,需要的朋友可以参考下
    2014-07-07
  • C++实现LeetCode(147.链表插入排序)

    C++实现LeetCode(147.链表插入排序)

    这篇文章主要介绍了C++实现LeetCode(147.链表插入排序),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-07-07
  • MFC自定义消息的实现方法

    MFC自定义消息的实现方法

    这篇文章主要介绍了MFC自定义消息的实现方法,通过该示例可以更好的理解MFC的消息封装机制,以便更加灵活的打造个性化的windows应用程序,需要的朋友可以参考下
    2014-07-07
  • 线段树详解以及C++实现代码

    线段树详解以及C++实现代码

    线段树在一些acm题目中经常见到,这种数据结构主要应用在计算几何和地理信息系统中,这篇文章主要给大家介绍了关于线段树以及C++实现的相关资料,需要的朋友可以参考下
    2021-07-07

最新评论