第77部分- Linux x86 64位汇编 优化编译器代码
第77部分- Linux x86 64位汇编 优化编译器代码-O1/-O2/-O3
仅仅使用汇编语言代码替换C或者C++不会必然使得程序执行的更好,因为编译器已经把所有高级语言代码都转化成了汇编语言。
这里的关键是编写比编译器生成的代码更好的汇编语言。当然也可以使用若干优化技巧来指示编译器生成汇编语言代码。我们需要了解如何从编译器生成代码,如何使用各种优化级别,以及利用了什么优化技术。
编译器的-O选项提供了GNU编译器的优化步骤。共有3个级别
-O:提供基础的级别的优化
-O2:提供更加高级的代码优化
-O3:提供最高级别的优化
O1优化
-O1支持如下的优化选项。
-fauto-inc-dec
-fbranch-count-reg
-fcombine-stack-adjustments
-fcompare-elim
-fcprop-registers
-fdce
-fdefer-pop
-fdelayed-branch
-fdse
-fforward-propagate
-fguess-branch-probability
-fif-conversion2
-fif-conversion
-finline-functions-called-once
-fipa-pure-const
-fipa-profile
-fipa-reference
-fmerge-constants
-fmove-loop-invariants
-freorder-blocks
-fshrink-wrap
-fshrink-wrap-separate
-fsplit-wide-types
-fssa-backprop
-fssa-phiopt
-ftree-bit-ccp
-ftree-ccp
-ftree-ch
-ftree-coalesce-vars
-ftree-copy-prop
-ftree-dce
-ftree-dominator-opts
-ftree-dse
-ftree-forwprop
-ftree-fre
-ftree-phiprop
-ftree-sink
-ftree-slsr
-ftree-sra
-ftree-pta
-ftree-ter
-funit-at-a-time
O2优化
-O2优化结合了第一个O1优化的所有优化技术,再加上了很多其他技术。
-fthread-jumps
-falign-functions -falign-jumps
-falign-loops -falign-labels
-fcaller-saves
-fcrossjumping
-fcse-follow-jumps -fcse-skip-blocks
-fdelete-null-pointer-checks
-fdevirtualize -fdevirtualize-speculatively
-fexpensive-optimizations
-fgcse -fgcse-lm
-fhoist-adjacent-loads
-finline-small-functions
-findirect-inlining
-fipa-cp
-fipa-bit-cp
-fipa-vrp
-fipa-sra
-fipa-icf
-fisolate-erroneous-paths-dereference
-flra-remat
-foptimize-sibling-calls
-foptimize-strlen
-fpartial-inlining
-fpeephole2
-freorder-blocks-algorithm=stc
-freorder-blocks-and-partition -freorder-functions
-frerun-cse-after-loop
-fsched-interblock -fsched-spec
-fschedule-insns -fschedule-insns2
-fstore-merging
-fstrict-aliasing -fstrict-overflow
-ftree-builtin-call-dce
-ftree-switch-conversion -ftree-tail-merge
-fcode-hoisting
-ftree-pre
-ftree-vrp
-fipa-ra
O3优化
O3选项访问编译器提供的最高级别。整合了O1和O2,还提供了非常专门的附加优化技术。
-finline-functions
-funswitch-loops
-fpredictive-commoning
-fgcse-after-reload
-ftree-loop-vectorize
-ftree-loop-distribute-patterns
-fsplit-paths
-ftree-slp-vectorize
-fvect-cost-model
-ftree-partial-pre
-fpeel-loops
-fipa-cp-clone
这些大家可以在
《Using the GNU Compiler Collection》中查看到。
第77部分- Linux x86 64位汇编 优化编译器代码相关推荐
- 第19部分- Linux x86 64位汇编GDB单步调试
第19部分- Linux x86 64位汇编GDB单步调试 本篇我们使用gdb来调试上篇中的汇编代码. gdb调试 使用gdb进行调试. #gdb ./addsum_arg 设置参数: (gdb) s ...
- 第41部分-Linux x86 64位汇编MMX使用
第41部分-Linux x86 64位汇编MMX使用 使用MMX架构需要一下步骤 从整数值创建打包整数值 把打包整数值加载到MMX寄存器中 对打包整数值执行MMX数学操作. 从MMX寄存器获得结果放到 ...
- 栈溢出攻击系列:shellcode在linux x86 64位攻击获得root权限(二)shellcode
shellcode 是一组指令opcode, 是可以被程序运行,因为shellcode是要直接操作寄存器和函数,所以opcode 必须是十六进制的形式. 既然是攻击,那shellcode 主要的目的是 ...
- Mac OS X下64位汇编与Linux下64位汇编的一些不同
1 首先系统调用号大大的不同:mac64和linux32的系统调用号也不同(虽然局部可能有相同) 2 mac64的系统调用号在: /usr/include/sys/syscall.h 可以查到,但是调 ...
- 64位汇编之linux系统调用
linux系统中64位汇编和32位汇编的系统调用主要有以下不同: (1)系统调用号不同.比如x86中sys_write是4,sys_exit是1:而x86_64中sys_write是1, sys_ex ...
- 虚拟机上安装 Red Hat Enterprise Linux 7 64位
一 .准备 1)可以支持64位 电脑一台: 2)安装VMware Workstaition 10及以上版本: 3)下载Red Hat Enterprise Linux 7 64位镜像: 二.安装 1) ...
- arm linux 64位,微软准备让Linux作为64位ARM Hyper-V客户机运行
原标题:微软准备让Linux作为64位ARM Hyper-V客户机运行 虽然微软的Hyper-V虚拟化管理程序和他们的Azure云在很大程度上是以x86_64为中心的,但随着Linux 5.13内核的 ...
- visual studio 64位汇编 listing列表文件
编写64位汇编与32位汇编步骤一样,但要增加一步 右键项目找到属性弹出窗口,如下图所示 在visual studio中生成列表文件 右键项目找到属性弹出窗口,如下图所示
- 查看linux是不是64位的命令
方法1: 查看linux是不是64位的命令: #file /sbin/init 结果会出来 xx bit 方法二: # getconf LONG_BIT 32 getconf命令还可以获取系统的基本配 ...
最新文章
- set_origin_pose算子说明
- granfana telegraf influx安装与使用
- Caddi Programming Contest 2021(AtCoder Beginner Contest 193) 题解
- NOI入门级:排序算法
- 正则表达式2-测试代码
- 服务应用监控健康检测
- kubernets 集群和本地环境联调环境打通工具kt-connect
- python newbie——PE No.3
- [转自他人]一款好用的软件安装管理器
- PxCook安装文件有问题处理办法
- 天使之火Angelfire:CIA入侵Windows系统的恶意软件
- 流浪是对另一种生活的执着
- 为什么会用到浅拷贝和深拷贝
- 机器自动翻译古文拼音 - 十大宋词 - 声声慢 寻寻觅觅 李清照
- python学习记录——容器篇
- Tensorflow2.0版本下如何实现Kronecker积
- 日常生活中使用的台式计算机,台式电脑鼠标不动应该怎么办
- Github每日精选(第48期):SQLite下的知识库memos
- 用CSS实现圆环倒计时
- nmap工具介绍及常用命令
热门文章
- python如何剪辑音频_剪辑音乐要很久?3行语句Python瞬间搞定
- 怎么取消苹果手机自动续费_探探怎么取消自动续费
- 基于java springboot框架开发机动车驾驶员计时培训监管系统平台
- Android 不归路之百度地图API学习(导航篇)
- Delphi 读XML文件
- vue路由传参的方式
- python新建项目没有venv_pycharm配置venv虚拟环境
- 怎么连别人虚拟机里面的数据库_VMWare Workstation 虚拟机软件常见使用技巧(2)...
- ts实现去除字符串空格
- html表格设置静态数据,构建静态页面 之 [ 表格 ]