编译选项o2
❶ 什么叫 -O2编译
【-O2编译】编译器提供-O选项,供程序优化使用。其中:
1、-O0表示没有优化;
2、-O1为缺省值,提供基础级别的优化;
3、-O2 提供更加高级的代码优化,会占用更长的编译时间;
4、-O3 提供最高级的代码优化。
【编译器】就是将“一种语言(通常为高级语言)”翻译为“另一种语言(通常为低级语言)”的程序。一个现代编译器的主要工作流程:源代码 (source code) → 预处理器 (preprocessor) → 编译器 (compiler) → 目标代码 (object code) → 链接器(Linker) → 可执行程序 (executables)
高级计算机语言便于人编写,阅读交流,维护。机器语言是计算机能直接解读、运行的。编译器将汇编或高级计算机语言源程序(Source program)作为输入,翻译成目标语言(Target language)机器代码的等价程序。源代码一般为高级语言 (High-level language), 如Pascal、C、C++、java、汉语编程等或汇编语言,而目标则是机器语言的目标代码(Object code),有时也称作机器代码(Machine code)。
❷ visual C++ 的优化选项分别都是什么意思
Od:编译器不做优化,通常debug的使用这个编译选项
O1:代码最小,使用这个选项编译出来的二进制文件是最小的,但是可能会牺牲一些执行效率
O2:编译出来的代码执行速度最快,但是大小会比O1大(release默认)
Ox:对程序进行最大优化,可能会牺牲一些兼容性问题等,对执行速度和二进制文件大小都尽可能优化
❸ makefile里面gcc-O2-o$lt;是什么意思
-O2表示优化选项,2表示最优优化,即编译器会优化你的程序;-o表示后边接的是文件名称;$@是Makefile的通配符,代指你前面指定的文件名,例如有规则%.o:%.c,那么$@表示xxx.o文件(xxx是你的源代码文件的名称前缀);$<表示搜索到的第一个匹配的文件,对于规则%.o:%.c,$<表示第一个找到的.c文件。简而言之,假设在一个文件夹下有若干.c文件,那么下面的规则:
%.o:%.c
gcc -O2 -o $@ $< #表示Tab键
表示把所有的.c文件编译成中间.o文件。
❹ linux下如何查看一个二进制文件是使用-O0优化还是-O2优化
gcc默认提供了5级优化选项:
-O/-O0:无优化(默认)
-O1:使用能减少目标文件大小以及执行时间并且不会使编译时间明显增加的优化。该模式在编译大型程序的时候会花费更多的时间和内存。在-O1下:编译会尝试减少代码体积和代码运行时间,但是并不执行会花费大量时间的优化操作。
-O2: 包含-O1的优化并增加了不需要在目标文件大小和执行速度上进行折衷的优化。GCC执行几乎所有支持的操作但不包括空间和速度之间权衡的优化,编译器不执行循环展开以及函数内联。这是推荐的优化等级,除非你有特殊的需求。-O2会比-O1启用多一些标记。与-O1比较该优化-O2将会花费更多的编译时间当然也会生成性能更好的代码。
-Os:专门优化目标文件大小,执行所有的不增加目标文件大小的-O2优化选项。同时-Os还会执行更加优化程序空间的选项。这对于磁盘空间极其紧张或者CPU缓存较小的机器非常有用。但也可能产生些许问题,因此软件树中的大部分ebuild都过滤掉这个等级的优化。使用-Os是不推荐的。
-O3: 打开所有-O2的优化选项并且增加 -finline-functions, -funswitch-loops,-fpredictive-commoning, -fgcse-after-reload and -ftree-vectorize优化选项。这是最高最危险的优化等级。用这个选项会延长编译代码的时间,并且在使用gcc4.x的系统里不应全局启用。自从3.x版本以来gcc的行为已经有了极大地改变。在3.x,-O3生成的代码也只是比-O2快一点点而已,而gcc4.x中还未必更快。用-O3来编译所有的软件包将产生更大体积更耗内存的二进制文件,大大增加编译失败的机会或不可预知的程序行为(包括错误)。这样做将得不偿失,记住过犹不及。在gcc 4.x.中使用-O3是不推荐的。
————————————————
版权声明:本文为CSDN博主“rongming_lu”的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/LU_ZHAO/java/article/details/104516291
❺ makefile里面 gcc -O2 -o $@ $< 是什么意思
-O2表示优化选项,2表示最优优化,即编译器会优化你的程序;-o表示后边接的是文件名称;$@是Makefile的通配符,代指前面指定的文件名。
一些常见的自动化变量说明如下:
(1) $@ ——目标文件的名称;
(2) $^ ——所有的依赖文件,以空格分开,不包含重复的依赖文件;
(3) $< ——第一个依赖文件的名称。
示例:
main:main.c sort.o
gcc main.c sort.o -o main
表示为简洁的就是:
main:main.c sort.o
gcc $^ -o $@
(5)编译选项o2扩展阅读:
在Makefile文件中描述了整个工程所有文件的编译顺序、编译规则。Makefile 有自己的书写格式、关键字、函数。像C 语言有自己的格式、关键字和函数一样。而且在Makefile 中可以使用系统shell所提供的任何命令来完成想要的工作。Makefile在绝大多数的IDE 开发环境中都在使用,已经成为一种工程的编译方法。