当前位置:首页 » 编程软件 » 龙芯编译速度

龙芯编译速度

发布时间: 2023-06-07 04:11:06

A. 解释下龙芯

关于CPU和芯片,我们标准的操作系统,大约有350个C函数,这种操作系统叫标准的操作系统,IEEE

POSIX这就是标准操作系统的规范,但是事实上,美国很多军方的CPU和工控,飞机制造和武器工业控制领域很多芯片是不支持这个标准的,比如军队的OpenRISC派系的芯片,只能支持大约100~150个标准C函数,当然了,剩下的200多个函数可以使用这个100多个函数来用软件来实现,但是,这些用软件实现的库和函数,运行速度相当的慢。
实际上mips就是当年早期OpenRISC商业化的产物,但是Mips走的更远,主要解决大规模并行的浮点数运算问题。mips是支持linux操作系统的,但是这个CPU只能顺利的运行大约150个标准的操作系统的C函数。
现在C++标准库STL一共又20个大类,超过了1000个函数或者模板实现,而boost库(STL的升级版)有超过2000个复杂函数或者模板实现,这些函数如果在intel或者AMD的芯片上执行得到的结果,跟在arm上执行得到的结果很多都是不同的,尤其是执行效率问题,很多在arm上慢的要死,比java还要慢(现在安卓机主要使用java开发应用软件,编译器是使用J2SDK修改的编译器)。苹果公司在这方面有比较深入的研究。这个不细谈。
如果这个C++函数在mips芯片上执行,这里面有一多半是根本无法执行的,也就是说,会崩溃和异常退出。并且,J2SDK也是无法在mips上顺利的执行的,相当的垃圾的一个芯片。
这就是为啥在美国9年代末期,mips被市场淘汰的根本原因。

B. 龙芯1b linux下 程序用什么编译执行

Linux下C程序的编辑,编译和运行以及调试

要使用的工具:
编辑:vim(vi)
编译和运行:gcc
调试:gdb

安装很简单(以下是以在CentOS中安装为例):

1
yum vim gcc gdb

1.使用vim编辑源文件
首先,打开终端练下手:

1
vim hello.c

(进入一般模式)
按下"i",进入编辑模式,在编辑模式下输入:

1
#include <stdio.h>

2
int main(){

3
printf("Hello, World!\n");

4
return 0;

5
}

输入完成,按"ESC"键,回到一般模式,然后按下":wq",即可保存并退出vim。

附注:
在一般模式下,按下":%!xxd"查看hello.c的16进制形式,回到文本格式按下":%!xxd -r"。
查看hello.c的二进制形式,按下":%!xxd -b",这是hello.c保存在磁盘上的存储状态。
至此,在vim已完成C源文件的编辑。
关于vim的使用,直接上网搜索vim,相关的文章是相当多的;或者参考vim的联机帮助,在命令行上键入"man vim"即可。

2.编译和运行

gcc命令的基本用法:

1
gcc[options] [filenames]

其中,filenames为文件名;options为编译选项
当不使用任何编译选项编译hello.c时,gcc将会自动编译产生一个a.out的可执行文件:

1
[root@localhost c]# ls

2
hello.c

3
[root@localhost c]# gcc hello.c

4
[root@localhost c]# ls

5
a.out hello.c

执行:

1
[root@localhost c]# ./a.out

2
Hello, World!

使用-o编译选择,可以为编译后的文件指定一个名字:

1
[root@localhost c]# ls

2
a.out hello.c

3
[root@localhost c]# gcc hello.c -o hello

4
[root@localhost c]# ls

5
a.out hello hello.c

执行:

1
[root@localhost c]# ./hello

2
Hello, World!

注意:使用-o选项时,-o后面必须跟一个文件名,即:-o outfile。

为了便于描述后面的选项,删除hello和a.out可执行文件。

结合介绍gcc的编译选项,分析hello.c的编译和执行过程:
(1)预处理阶段:使用-E选项,对输入文件只做预处理不编译。当使用这个选项时,预处理器的输出被送到标准输出而不是存储到文件。如果想将预处理的输出存储到文件,可结合-o选项使用,使用如下:

1
[root@localhost c]# ls

2
hello.c

3
[root@localhost c]# gcc -E hello.c -o hello.i

4
[root@localhost c]# ls

5
hello.c hello.i

使用less查看下hello.i:

1
[root@localhost c]# less hello.i

(2)编译阶段:使用-S选项,将C程序编译为汇编语言文件后停止编译,gcc编译产生汇编文件的默认后缀为.s。

1
[root@localhost c]# ls

2
hello.c hello.i

3
[root@localhost c]# gcc -S hello.c

4
[root@localhost c]# ls

5
hello.c hello.i hello.s

在gcc -S hello.c处,使用C源文件编译,也可以用gcc -S hello.i的预处理文件编译,结果一样。

使用-S编译时,也可以和-o结合使用指定编译产生的汇编语言文件的名字:

1
[root@localhost c]# ls

2
hello.c hello.i hello.s

3
[root@localhost c]# gcc -S hello.i -o hello_s.s

4
[root@localhost c]# ls

5
hello.c hello.i hello.s hello_s.s

可使用less命令查看汇编代码。

(3)汇编阶段:使用-c选项,将C源文件或者汇编语言文件编译成可重定向的目标文件(二进制形式),其默认后缀为.o。

1
[root@localhost c]# ls

2
hello.c hello.i hello.s hello_s.s

3
[root@localhost c]# gcc -c hello.s

4
[root@localhost c]# ls

5
hello.c hello.i hello.o hello.s hello_s.s

也可以和-o结合使用指定编译产生的目标文件的名字:

1
[root@localhost c]# gcc -c hello.s -o hello.o

由于hello.o是二进制文件,使用less查看显示为乱码;

然后使用vim hello.o打开也显示为乱码,按下":%!xxd"查看其16进制形式,按下":%!xxd -r"退出 16进制查看模式,回到乱码状态。在退出vim时,若提示已经修改了文件,则使用":q!"强制退出。

(4)链接阶段:链接器将可重定向的目标文件hello.o以及库文件(如printf.o)执行并入操作,形成最终可执行的可执行目标文件。

1
[root@localhost c]# ls

2
hello.c hello.i hello.o hello.s hello_s.s

3
[root@localhost c]# gcc hello.o

4
[root@localhost c]# ls

5
a.out hello.c hello.i hello.o hello.s hello_s.s

可使用-o选项,指定输出文件(即可执行目标文件)的名字:

1
[root@localhost c]# gcc hello.o -o hello

2
[root@localhost c]# ls

3
a.out hello hello.c hello.i hello.o hello.s hello_s.s

(5)执行阶段:

1
[root@localhost c]# ./a.out

2
Hello, World!

3
[root@localhost c]# ./hello

4
Hello, World!

由此,看出前面使用的gcc hello.c -o
hello命令,将hello.c直接编译为可执行的目标文件,中间经过于处理器的预处理阶段(源文件到预处理文件),编译器的编译阶段(预处理文件到汇
编文件),汇编器的汇编阶段(汇编文件到可重定向的目标文件),链接器的链接阶段(可重定向的目标文件到可执行的目标文件)。

还有其他的选项如下:
-Idir:dir是头文件所在的目录
-Ldir:dir是库文件所在的目录

-Wall:打印所有的警告信息
-Wl,options:options是传递给链接器的选项

编译优化选项:-O和-O2
-O选项告诉GCC 对源代码进行基本优化。这些优化在大多数情况下都会使程序执行的更快。-O2选项告诉GCC产生尽可能小和尽可能快的代码。
-O2选项将使编译的速度比使用-O时慢。但通常产生的代码执行速度会更快。

除了-O和-O2优化选项外,还有一些低级选项用于产生更快的代码。这些选项非常的特殊,而且最好只有当你完全理解这些选项将会对编译后的代码产生什么样的效果时再去使用。这些选项的详细描述,请参考GCC的联机帮助,在命令行上键入"man gcc"即可。

调试选项:-g(使用详情见第3部分)
-g选项告诉GCC产生能被GNU调试器使用的调试信息以便调试你的程序。
即:在生成的目标文件中添加调试信息,所谓调试信息就是源代码和指令之间的对应关系,在gdb调试和objmp反汇编时要用到这些信息。

3.调试
虽然GCC提供了调试选项,但是本身不能用于调试。Linux 提供了一个名为gdb的GNU调试程序。gdb是一个用来调试C和C++程序的调试器。它使你能在程序运行时观察程序的内部结构和内存的使用情况。以下是gdb所提供的一些功能:
a.它使你能监视你程序中变量的值;
b.它使你能设置断点以使程序在指定的代码行上停止执行;
c.它使你能一行行的执行你的代码。

(1)启动gdb
在命令行上键入"gdb"并按回车键就可以运行gdb了,如下:

1
[root@localhost c]# gdb

2
GNU gdb (GDB) Red Hat Enterprise Linux (7.2-60.el6_4.1)

3
Copyright (C) 2010 Free Software Foundation, Inc.

4
License GPLv3+: GNU GPL version 3 or later This is free software: you are free to change and redistribute it.

5
There is NO WARRANTY, to the extent permitted by law. Type "show ing"

6
and "show warranty" for details.

7
This GDB was configured as "x86_64-redhat-linux-gnu".

8
For bug reporting instructions, please see:<>.

9
(gdb)

当启动gdb之后,即可在命令行上输入命令进行相关的调试操作。
也可以以下面的方式来启动gdb:

1
[root@localhost c]# gdb hello

这种方式启动gdb,直接将指定调试的程序文件装载到调试环境中。也就是让gdb装入名称为filename的可执行文件,从而准备调试。

了能够进行调试,当前调试的程序文件中必须包含调试信息。其中调试信息包含程序中的每个变量的类型和其在可执行文件里的地址映射以及源代码的行号,gdb
利用这些信息使源代码和机器码相关联。因此在使用gcc编译源程序的时候必须使用-g选项,以便将调试信息包含在可执行文件中。
例如:

1
[root@localhost c]# gcc -g hello.c -o hello

gdb还提供了其他的启动选项,请参考gdb的联机帮助。在命令行上键入"man gdb"并回车即可。

(2)gdb基本命令
<1>单步执行和跟踪函数调用
程序编辑如下:

01
#include <stdio.h>

02
int add_range(int low, int high){

03
int i;

04
int sum;

05
for(i = low; i <= high; i++){

06
sum = sum + i;

07
}

08
return sum;

09
}

10

11
int main(){

12
int result[100];

13
result[0] = add_range(1, 10);

14
result[1] = add_range(1, 100);

15
printf("result[0] = %d\nresult[1] = %d\n", result[0], result[1]);

16
return 0;

17

18
}

编译和运行如下:

1
[root@localhost gdb_demo]# vim test1.c

2
[root@localhost gdb_demo]# gcc test1.c -o test1

3
[root@localhost gdb_demo]# ls

4
test1 test1.c

5
[root@localhost gdb_demo]# ./test1

6
result[0] = 55

7
result[1] = 5105

热点内容
安卓什么软件能拍到月亮 发布:2025-02-12 04:59:42 浏览:777
手机卡忘记服务密码怎么办 发布:2025-02-12 04:59:10 浏览:369
如何让助理服务器可以被远程 发布:2025-02-12 04:47:11 浏览:769
存储空间不足但 发布:2025-02-12 04:46:27 浏览:273
树莓派编程板 发布:2025-02-12 04:41:45 浏览:904
php取整 发布:2025-02-12 04:33:21 浏览:221
我的世界创造服务器位置 发布:2025-02-12 04:24:49 浏览:701
毛利润算法 发布:2025-02-12 04:22:42 浏览:754
战舰少女r红茶脚本 发布:2025-02-12 04:05:05 浏览:465
峰火战国服务器什么时候开 发布:2025-02-12 03:56:31 浏览:175