mac系统下GCC优化编译的使用

mac系统下GCC优化编译的使用

编译流程

预处理:g++ -E homework.cpp -o homework.i
编译:g++ -S homework.i -o homework.s //.s为汇编文件
汇编:g++ -c homework.s -o homework.o
链接:g++ homework.o -o homework

优化选项

-O0(无优化):
这是默认的优化级别,编译器不执行任何优化。
适用于调试目的或要求最小编译时间的情况。
在这种情况下,编译器会尽量缩短编译消耗(时间、空间),以便产出与程序预期结果相符的调试信息。-O1(基本优化):
执行一些基本的优化,如删除未使用的变量、内联简单函数等。
旨在提高代码的执行效率,同时保持较快的编译速度。
相比-O0,它会对代码的分支、常量以及表达式等进行优化,但并不会执行会花费大量时间的优化操作。-O2(中级优化):
在-O1的基础上进行更多的优化,包括更大范围的内联、循环展开、函数调用图优化等。
它可以显著提高代码的性能,但编译时间可能会稍长。
-O2是推荐的优化等级,除非有特殊的需求。-O3(高级优化):
在-O2的基础上进行更多的优化,例如使用伪寄存器网络、普通函数的内联,以及针对循环的更多优化。
它是优化级别最高的选项,旨在进一步提高代码性能,但编译时间可能会更长。

如g++ -O2 homework.cpp -o homework,生成优化后的可执行代码
再通过time命令查询运行时间
time ./homework
在这里插入图片描述

编译过程优化信息输出

通过-fopt-info选项可以看出在原有代码的基础上进行了哪些优化

macOS系统中默认的C/C++编译器是clang/clang++,命令行使用gcc/g++或者clang/clang++来执行命令时,都是调用clang/clang++编译器,缺少-fopt-info选项。

因此,可以通过brew安装gcc,在运行命令时要使用gcc-13
gcc-13 -O2 -S homework.cpp -fopt-info

homework.cpp:37:9: optimized:  Inlining int vecadd(double*, double*, double*, size_t)/547 into int main(int, char**)/549.
homework.cpp:77:1: optimized:  Inlined void __static_initialization_and_destruction_0()/1093 into (static initializers for homework.cpp)/1224 which now has time 26.000000 and size 9, net change of -4.
homework.cpp:13:23: optimized: loop vectorized using 16 byte vectors

可以很清楚的看到进行了哪些优化

在这个基础上,可以使用vimdiff来比较优化前和优化后的汇编语言的不同之处。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/538872.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

4G安卓核心板T310_紫光展锐平台方案

紫光展锐T310应用 DynamlQ架构 12nm 制程工艺,采用 1*Cortex-A753*Cortex-A55处理器,搭载Android11.0操作系统,主频最高达2.0GHz.此外,DynamlQ融入了AI神经网络技术,新增机器学习指令,让其在运算方面的机器…

软件设计师17--磁盘管理

软件设计师17--磁盘管理 考点1:存储管理 - 磁盘管理调度算法磁盘调度 - FCFS磁盘调度 - SSTF例题: 考点1:存储管理 - 磁盘管理 存取时间寻道时间等待时间,训导时间是指磁头移动到磁道所需的时间;等待时间为等待读写的扇…

CC攻击详细

CC攻击是DDoS攻击的其中一种,是目前应用层攻击的主要手段之一,相比其它的DDoS攻击CC似乎更有技术含量一些。CC攻击借助代理服务器生成指向目标系统的合法请求,实现伪装和DDoS。我们都有这样的体验,访问一个静态页面,即…

笔记本的显示器都是核显输出,还要独显干啥呢?

前言 今天小白还在睡梦中,就接到一个朋友发来的消息:笔记本的显示器都是直接在核显上的,没有改独显的选项。 如果是这样,那笔记本还有独立显卡什么事情?笔记本加了独显难道就只是为了圈钱? 其实并不是这样…

Cassandra 集群安装部署

文章目录 一、概述1.官方文档2. 克隆服务器3.安装说明4.安装准备4.1.安装 JDK 114.2.安装 Python4.3.下载文件 二、安装部署1.配置 Cassandra2.启动 Cassandra3.关闭Cassandra4.查看状态5.客户端连接服务器6.服务运行脚本 开源中间件 # Cassandrahttps://iothub.org.cn/docs/m…

一口吃掉Linux基础操作

一般在windows上面想要操作Linux系统就需要装软件搞一个虚拟机,我用的是Ubuntu22,就是Linux的发行版.安装Ubuntu的过程比较复杂,最重要的一点是安装时要断网,否则会很慢。 Ubuntu 配置指南 — 地震“学”科研入门教程 先介绍一个…

popstate 的触发

会触发popstate事件的场景 用户点击浏览器的前进、后退按钮 代码中调用history.back() 、history.forward()、history.go()不会触发popstate事件的场景 代码中调用pushState()、replaceState() 划重点 只有在同一文档的两个历史记录条目之间导航会触发该事件, 也…

CVE-2022-1310:RegExp[@@replace] missing write barrier lead a UAF

文章目录 环境搭建漏洞分析漏洞利用漏洞触发链RCE原语构造 总结参考 环境搭建 嗯,这里不知道是不是环境搭建的有问题,笔者最后成功的实现了任意地址读写,但是任意读写的存在限制,任意写 wasm 的 RWX 区域时会直接报错&#xff0c…

3.14网络编程

TCP机械臂调试代码 #include<myhead.h> #include <termios.h> #define SER_PORT 8888 //服务器端口号 #define SER_IP "192.168.117.36" //服务器IP #define CLI_PORT 9000 //客户端端口号 #define CLI_IP "192.1…

基于SpringBoot的“家政服务管理平台”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“家政服务管理平台”的设计与实现&#xff08;源码数据库文档PPT) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBoot 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 系统首页界面图 用户注册界面图 服务信息界面…

【Cookie和Session辨析】

1.cookie 1.1什么是cookie Cookie 是一种在客户端&#xff08;通常是 Web 浏览器&#xff09;和服务器之间传递信息的机制&#xff0c;用于在客户端存储少量的数据。它由服务器发送到客户端浏览器&#xff0c;然后浏览器会将这些数据存储在本地&#xff0c;并在后续的请求中将…

SpringBoot+vue3打造企业级一体化SaaS系统

SpringBootvue3打造企业级一体化SaaS系统 简介&#xff1a;    全面提升前后端技术水平&#xff0c;独立完成全栈项目开发能力&#xff0c;快速进击全栈工程师&#xff0c;最终在面试中脱颖而出。整合后端主流技术&#xff08;Spring Boot、物理数据库隔离、加载动态权限、多…