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

目录
  • armx86
  • ARM 与 X86 的概述
  • 指令系统
  • 能量消耗
  • 软件
  • 应用

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

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区别内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • C++基于文件流与armadillo读取mnist示例详解

    前言 发现网上大把都是用python读取mnist的,用C++大都是用opencv读取的,但我不怎么用opencv,因此自己摸索了个使用文件流读取mnist的方法,armadillo仅作为储存矩阵的一种方式. 1. mnist文件 首先避坑,这些文件要解压. 官网截图可知,文件头很简单,只有若干个32位整数,MSB,像素和标签均是无符号字节(即unsigned char)可以先读取文件头,再读取剩下的部分. 2. 读取文件头 我觉得没什么必要啊,直接跳过不行吗 文件头都是32位,那就整四个uns

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

    目录 armx86 ARM 与 X86 的概述 指令系统 能量消耗 软件 应用 从使用上来看,可执行程序肯定是不通用的. armx86 生成的可执行程序大小都有差异呢. 但是,如果源码编译,如果环境类似,相同的源码可以直接移植. 例如:如下程序donut.cpp #include <stdio.h> #include <math.h> #include <cstring> #include <unistd.h> int main() { float A =

  • jQuery循环滚动展示代码 可应用到文字和图片上

    看见有的同学用 Adam Cai 的代码,感觉稍显复杂而且不够 jQuery.我用只依靠 jQuery 入门的思路写了一版,代码更少使用也更简单. 在线演示: http://demo.jb51.net/js/2012/jquery_xhpic/[JavaScript]代码 复制代码 代码如下: $(document).ready(function(){ $("#sItem li:not(:first)").css("display","none"

  • 让你的博文自动带上缩址的实现代码,方便发到微博客上

    复制代码 代码如下: <script type="text/javascript"> $(function(){ c_url = 'http://s8.hk:8088/s8/s?format=text&longUrl='; c_url += document.location.href; c_url += '&jsonp=?' $.getJSON(c_url, function(data){ $("<div>本文短址:</div&

  • 易语言用代码体现如果、如果真和判断的区别

    如果.如果真.判断的区别 .版本 2 .程序集 窗口程序集1 .子程序 _如果按钮_被单击, , , 如果() .如果 (输入编辑框.内容 = 到文本 (1)) 提示标签.标题 = "[如果命令提示]你输入的是1号指令" .否则 .如果 (输入编辑框.内容 = 到文本 (2)) 提示标签.标题 = "[如果命令提示]你输入的是2号指令" .否则 .如果 (输入编辑框.内容 = 到文本 (3)) 提示标签.标题 = "[如果命令提示]你输入的是3号指令&qu

  • MyBatis中$和#的深入讲解

    这是一次代码优化过程中发现的问题,在功能优化后发现部分数据查不到出来了,问题就在于一条sql上的#和$. 下图为两条sql: 从图上可以看出 wwlr.LabelId in(${showLabels}) 和 wwlr.LabelId in(#{showLabels}),其中showLabels是传进来一个字符串类型的参数,参数的样子是这样的"4,44,514",问题就出在这个参数传进来后#和$处理的方式是不一样的. 1.#{ }是预编译处理,MyBatis在处理#{ }时,它会将sql

  • C#使用struct直接转换下位机数据的示例代码

    编写上位机与下位机通信的时候,涉及到协议的转换,比较多会使用到二进制.传统的方法,是将数据整体获取到byte数组中,然后逐字节对数据进行解析.这样操作工作量比较大,对于较长数据段更容易计算位置出错. 其实,对于下位机给出通讯的数据结构的情况下,可以直接使用C#的struct将数据直接转换.需要使用到Marshal. 数据结构 假定下位机(C语言编写)给到我们的数据结构是这个,传输方式为小端方式 typedef struct { unsigned long int time; // 4个字节 fl

  • Python 高级教程之线程进程和协程的代码解析

    目录 进程 进程 5 种基本状态 进程的特点 进程间数据共享 进程池 进程的缺点 线程 线程的定义 使用线程模块的简单示例 代码解析 协程 协程与线程 Python 协程 协程的执行 关闭协程 链接协程以创建管道 总结 进程 进程是指在系统中正在运行的一个应用程序,是 CPU 的最小工作单元. 进程 5 种基本状态 一个进程至少具有 5 种基本状态:初始态.就绪状态.等待(阻塞)状态.执行状态.终止状态. 初始状态:进程刚被创建,由于其他进程正占有CPU资源,所以得不到执行,只能处于初始状态.

  • Python实现识别图片为文字的示例代码

    目录 1.环境准备 2.业务实现 3.效果展示 本来想着做一个将图片识别为文字的小功能,本想到Google上面第一页全是各种收费平台的广告. 这些平台提供的基本都是让我们通过调用相关的三方接口实现的,本着坚决不想花一分钱的态度,在论坛找有没有可以免费解决的方案. 果然,有大佬早就做出开源框架pytesseract,差点让我损失了一笔巨款,哈哈~ 这次只为实现将图片识别为文字的业务功能,就不使用PyQt5做页面应用了.后面若是需要做成UI应用朋友比较多,我有时间会将这个小工具封装开发成一个PyQ5

  • 使用AngularJS编写较为优美的JavaScript代码指南

    本文示例代码下载:modulePattern.zip - 所有的 4 个 HTML 文件  以及 panacea.js - 1.6 KB 介绍 AngularJS 的库里面有很多东西,但本文中我只想专注于小的,针对特定主题的库,我相信通过它们能对Angular有一个较好的介绍.  理解这篇文章并不需要你有任何Angular相关的,甚至是JavaScript的经验.希望你能从本文中看到一些使用Angular的好处,并乐于动手尝试. 背景 我使用Angular有一段时间了,而在学习Angular的时

  • Python探索之ModelForm代码详解

    这是一个神奇的组件,通过名字我们可以看出来,这个组件的功能就是把model和form组合起来,对,你没猜错,相信自己的英语水平. 先来一个简单的例子来看一下这个东西怎么用: 比如我们的数据库中有这样一张学生表,字段有姓名,年龄,爱好,邮箱,电话,住址,注册时间等等一大堆信息,现在让你写一个创建学生的页面,你的后台应该怎么写呢? 首先我们会在前端一个一个罗列出这些字段,让用户去填写,然后我们从后天一个一个接收用户的输入,创建一个新的学生对象,保存 其实,重点不是这些,而是合法性验证,我们需要在前端

随机推荐