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

news/2024/5/26 20:33:50/文章来源:https://blog.csdn.net/weixin_43456810/article/details/136724363

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.luyixian.cn/news_show_1007278.aspx

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

相关文章

前端网页如何在 Windows 上测试 Safari

“Windows上的Safari?”,“那不可能! Safari 无法在 Windows 上运行。当然的! 曾经可以在windows上运行,但苹果早在 2012 年就停止支持 Windows。对于想要测试 Safari 兼容性的 Web 开发人员来说,这真是太不…

数据结构-树状数组

📑前言 本文主要是【树状数组】——树状数组简单使用的文章,如果有什么需要改进的地方还请大佬指出⛺️ 🎬作者简介:大家好,我是听风与他🥇 ☁️博客首页:CSDN主页听风与他 🌄每日一…

VR数字展厅在企业中应用的优势有哪些?

随着VR全景技术的成熟,VR数字展厅逐渐成为了企业展示形象和产品的重要手段之一。VR企业数字展厅是一种通过VR技术、3D建模技术展示企业形象和产品的创新方式,将企业线下的展厅搬到线上,为企业品牌形象带来了很多优势。 VR数字展厅在企业中应用…

【大厂AI课学习笔记NO.68】开源和开源发展情况

开源即源代码公开,任何人能获取源代码,查看、修改、分发他们认为合适的代码。 依托同行评审和社区生成,旨在以分散、协作的方式开发。 我们曾经很详细的讨论过开源协议的问题,详细可以参考我的文章: https://giszz.…

为什么要用scrapy爬虫库?而不是纯python进行爬虫?

为什么要用scrapy爬虫库?而不是纯python进行爬虫? Scrapy的优点Scrapy节省的工作使用纯Python编写爬虫的不足 Scrapy是一个使用Python编写的开源和协作的web爬虫框架,它被设计用于爬取网页数据并从中提取结构化数据。Scrapy的强大之处在于其广…

新手如何快速上手学习单片机?

读者朋友能容我,不使博文负真心 新开专栏,期待与诸君共享精彩 个人主页:17_Kevin-CSDN博客 专栏:《单片机》 学习单片机是一个有趣且有挑战性的过程。单片机是一种微控制器,广泛应用于各种电子设备和嵌入式系统中。在这…

精通Linuxd磁盘分区挂载的精髓:从理论到实战一网打尽

前言 想要深入了解Linux系统中磁盘分区挂载的原理和操作步骤吗?这篇文章将为你揭开分区挂载的神秘面纱,从理论到实践,详细讲解分区挂载的一切。无论你是初学者还是有一定经验的用户,都能从中获取新知识,提升技能水平。…

前后端交互理解 简易表白墙(servlet)

前后端交互理解 简易表白墙(servlet) 文章目录 前后端交互理解 简易表白墙(servlet)后端核心内容前后端交互接口约定后端代码展示 上期介绍过 Servlet API ,本篇文章目的是借助 servlet 做出一个完整的网站。在一个网站…

RabbitMQ应用场景

1、异步处理 假设想象一下我们做一个商城项目,在用户支付模块中,可能会涉及到其它业务,比如:积分折扣、消费券、短信验证等功能。我们传统的执行步骤是逐步执行,也就是说当用户点击支付 ----> 积分折扣 ----> 消…

Docker进阶:深入了解 Dockerfile

Docker进阶:深入了解 Dockerfile 一、Dockerfile 概述二、Dockerfile 优点三、Dockerfile 编写规则四、Dockerfile 中常用的指令1、FROM2、LABEL3、RUN4、CMD5、ENTRYPOINT6、COPY7、ADD8、WORKDIR9、 ENV10、EXPOSE11、VOLUME12、USER13、注释14、ONBUILD 命令15、…

区块链基础知识(上):区块链基本原理、加密哈希、公钥加密

目录 基本原理 加密哈希: 公钥加密: 希望有人向你发送只有你才能打开的加密文档/消息时使用 PKC 希望向其他人发送加密文档/消息并证明它确实由你发送时使用 PKC 使用 PKC 和加密哈希对文档/消息进行数字签名 交易哈希链使用数字签名转让数字资产所…

【洛谷 P8781】[蓝桥杯 2022 省 B] 修剪灌木 题解(模拟+差分)

[蓝桥杯 2022 省 B] 修剪灌木 题目描述 爱丽丝要完成一项修剪灌木的工作。 有 N N N 棵灌木整齐的从左到右排成一排。爱丽丝在每天傍晩会修剪一棵灌木,让灌木的高度变为 0 0 0 厘米。爱丽丝修剪灌木的顺序是从最左侧的灌木开始,每天向右修剪一棵灌木…

centos 系统 yum 无法安装(换国内镜像地下)

centos 系统 yum 因为无法连接到国外的官网而无法安装,问题如下图: 更换阿里镜像,配置文件路径:/etc/yum.repos.d/CentOS-Base.repo(如果目录有多余的文件可以移动到子目录,以免造成影响) bas…

docker使用jupyter/datascience-notebook,重置密码,并且设置各类易用参数

前言 前一篇文章写了自己安装conda环境,然后添加C、C语言环境等,那时候就在想,有没有现成的docker可以用,后来搜了一下docker的网上镜像,还真的有: 可以看到有一个人的镜像,星星是最多的&#x…

React-嵌套路由

1.概念 说明&#xff1a;在一级路由中又内嵌了其他路由&#xff0c;这种关系就叫做嵌套路由&#xff0c;嵌套至一级路由内的路由又称作二级路由。 2.实现步骤 说明&#xff1a;使用childen属性配置路由嵌套关系&#xff0c;使用<Outlet/>组件配置二级路由渲染的位置。…

基于springboot实现驾校信息管理系统项目【项目源码+论文说明】

基于springboot实现驾校信息管理系统演示 摘要 随着人们生活水平的不断提高&#xff0c;出行方式多样化&#xff0c;也以私家车为主&#xff0c;那么既然私家车的需求不断增长&#xff0c;那么基于驾校的考核管理也就不断增强&#xff0c;那么业务系统也就慢慢的随之加大。信息…

[保姆级教程]Windows安装MongoDB教程

文章目录 导文MongoDB安装包下载1.点击进入mongodb官网2.点击MongoDB Community Edition&#xff08;社区版&#xff09;&#xff0c;进入下图界面3.选择版本4.下载5.安装6.勾选同意协议&#xff0c;点击“Next"7.选择自定义安装8.点击“Next"9.修改到合适的地址10.点…

Tensorflow实现手写数字识别

模型架构 具有10个神经元&#xff0c;对应10个类别&#xff08;0-9的数字&#xff09;。使用softmax激活函数&#xff0c;对多分类问题进行概率归一化。输出层 (Dense):具有64个神经元。激活函数为ReLU。全连接层 (Dense):将二维数据展平成一维&#xff0c;为全连接层做准备。展…

深入了解volatile、内存屏障与happens-before规则

1、编译器优化的重排序。编译器在不改变单线程程序语义的前提下&#xff0c;可以重新安排语句的执行顺序&#xff1b;2、指令级并行的重排序。现代处理器采用了指令级并行技术来将多条指令重叠执行。如果不存在数据依赖性&#xff0c;处理器可以改变语句对应机器指令的执行顺序…

开源的python 游戏开发库介绍

本文将为您详细讲解开源的 Python 游戏开发库&#xff0c;以及它们的特点、区别和应用场景。Python 社区提供了多种游戏开发库&#xff0c;这些库可以帮助您在 Python 应用程序中实现游戏逻辑、图形渲染、声音处理等功能。 1. Pygame 特点 - 基于 Python 的游戏开发库。…