使用C++ __builtin_expect优化程序性能后,程序体积不改变原因

news2024/11/17 19:38:17

结论

使用__builtin_expect优化程序性能,开启-O3的情况下,确实程序的体积可能不改变,但是还是会产生优化效果。

测试代码

不使用__builtin_expect

#include <iostream>

void fun(int a, int b) {
      // 不使用__builtin_expect
  if (a < b) {
    std::cout << "a < b" << std::endl;
  } else {
    std::cout << "a >= b" << std::endl;
  }
}

int main() {
  return 0;
}

使用__builtin_expect

#include <iostream>

void fun(int a, int b) {
      // 使用__builtin_expect
  if (__builtin_expect(a < b, 1)) {
    std::cout << "a < b" << std::endl;
  } else {
    std::cout << "a >= b" << std::endl;
  }
}

int main() {
  return 0;
}

在Compiler Explorer 选择ARM64 gcc9.5 -O3优化

在这里插入图片描述

汇编指令对比

在这里插入图片描述
上图中主要汇编指令的顺序不一致

在ubuntu 20.04下使用 g++ -O3测试
在这里插入图片描述

发现使用使用__builtin_expect前后程序的大小是完全一样的。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

前端面试题 | 常考题整理

本文为面试中出现的高频次考题&#xff0c;具体还是要看所有题。 目录 css 1、☆介绍下 BFC 及其应用 3、☆浮动清除 17、☆说几个未知宽高元素水平垂直居中方法 js 9、☆箭头函数与普通函数的区别是什么&#xff1f;构造函数可以使用 new 生成实例&#xff0c;那么箭头…

Hass哈斯数控数据采集网络IP配置设置

机床数据采集&#xff08;MDC&#xff09;允许你使用Q和E命令通过网络接口或选项无线网络从控制系统提取数据。设置143支持该功能&#xff0c;并且指定控制器使用这个数据端口。MDC是一个需要一台附加计算机发送请求&#xff0c;解释说明和存储机床数据的软件功能。这个远程计算…

【Vue】结合ElementUI实现简单数据请求和页面跳转功能

一、准备工作 1、创建一个Vue-cli程序 之前的博客有。各位看官姥爷&#xff0c;可以自查。 2、安装ElementUI 在创建Vue-cli程序的过程中&#xff0c;需要在控制台执行以下指令&#xff1a; #安装 element-ui npm i element-ui -S #安装 SASS 加载器 cnpm install sass-loa…

SD卡和TF卡

SD卡和TF的电信号区别在于 SD比TF多一个地线。 请注意假如TVS结电容过高会导致无法通信&#xff0c;对于高速的通信同样如此&#xff0c;需要控制好ESD的结电容。 SD卡线需要注意50ohm阻抗要求 https://blog.csdn.net/jiangfutao/article/details/124466153 SD卡&#xff1a; …

解析ProxySQL的故障转移机制

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 解析ProxySQL的故障转移机制 前言故障检测故障切换策略故障转移流程 前言 在数据库的世界里&#xff0c;故障就像是一颗定时炸弹&#xff0c;随时可能引发系统崩溃。而ProxySQL&#xff0c;就像是这场…

组织机构树形列表实现

先看下效果图&#xff1a; 主要是用xm-select.js组件做的一个树形列表 xm-select.js的说明文档&#xff1a;https://maplemei.gitee.io/xm-select/?select1#/basic/disabled 实现步骤&#xff1a; HTML部分 <!DOCTYPE html> <html lang"en"> <hea…

【Linux系统编程】第十五弹---调试器gdb使用

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】【C详解】【Linux系统编程】 目录 1、背景 2、安装gdb 3、gdb的使用 总结 1、背景 前面我们学习了文件编辑器&#xff0c;项目自动化构建工具&#xff0c;以及g…

mybatis-plus代码

项目结构 config package com.example.mpdemo.config;import com.baomidou.mybatisplus.annotation.DbType; import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerIntercept…

1756jsp农产品销售管理系统Myeclipse开发mysql数据库C2C模式java编程计算机网页项目沙箱支付

一、源码特点 java 农产品销售管理系统 是一套完善的web设计系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统采用web模式&#xff0c;系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发&#xff0…

Linux文本处理工具【tr、cut、sort、uniq】

1. tr 命令——替换、压缩、删除 tr (Text Replacer) 命令常用来对来自标准输入的字符进行替换、压缩和删除。 命令格式 &#xff1a;tr [选项]... SET1 [SET2] &#xff08;SET 是一组字符串&#xff0c;一般都可按照字面含义理解&#xff09; 选项&#xff1a; -d 删除 -s 压…

vue地址选择器-三级联选择器+详细地址

在页面的显示情况 前端拼接实现存储 具体实现步骤 1.安装中国全省市区的数据 在命令提示符窗口使用管理员身份进入对应vue项目的文件夹&#xff0c;在窗口安装 npm install element-china-area-data -S2.在script内引入安装的数据 import {regionData,codeToText } from…

SpringBoot 使用 @RequiredArgsConstructor(onConstructor_ = @Autowired) 报错解决

若使用 RequiredArgsConstructor(onConstructor_ Autowired) 启动报错&#xff0c;或者爆红可以使用以下方法解决 1. 安装或启用 Lombok插件 2. 检查 Lombok 版本 3. 若 onConstructor_ 爆红&#xff0c; 可能是IDEA中文软件包冲突 4. 若以上还是不行&#xff0c;可以添加…

CSS-盒子模型

盒子模型的重要组成部分 内容区域content&#xff1a;width , height 内边距&#xff1a;内边框和内容区域的距离Padding边框线&#xff1a;Border外边距&#xff1a;Margin Border (边框线) 属性&#xff1a;Border 属性值&#xff1a;边框线粗细px 线条样式 颜色(不区分…

工业无尘布的静电问题及解决方法

工业生产中&#xff0c;无尘布是一种常用的清洁工具&#xff0c;但在使用过程中&#xff0c;静电问题常常会给生产环境带来困扰。本文优斯特将探讨工业无尘布的静电问题&#xff0c;并介绍解决这些问题的方法。 1. 静电产生原因 工业无尘布在擦拭过程中可能会产生静电&#x…

使用凌鲨建立软件研发技能学习小组

凌鲨(OpenLinkSaas)的团队功能除了提供论坛功能&#xff0c;还能记录团队成员的成长记录。 使用方法 打开团队功能 团队功能在默认情况下是关闭的&#xff0c;你可以在登录后打开团队功能开关。 创建学习团队 日报/周报/个人目标一般是企业团队需要&#xff0c;建议关闭。 …

unity基础(一)

内容概要&#xff1a; 生命周期函数vector3 位置 方向 缩放旋转等信息Vector3欧拉角和Quaternion四元素unity脚本执行顺序设置 一 生命周期函数 方法说明Awake最早调用,所以一般可以再此实现单例模式OnEnable组件激活后调用,在Awake后会调用一次Start在Update之前调用一次&a…

Spring 中 @Transactional 是怎么引入事务 AOP 的?

在 Spring 中&#xff0c;Transactional 注解是管理事务的关键工具之一。它允许开发人员通过简单地在方法或类上添加注解来定义事务的边界&#xff0c;从而实现对数据库操作的事务管理。 Transactional 是基于 Spring AOP&#xff08;Aspect-Oriented Programming&#xff0c;…

【小笔记】问答系统可视化实现的三种方式

下面三种方式都是基于Python的哈&#xff0c;从简单到复杂。 方式一&#xff1a;命令行交互问答 优点&#xff1a;原始简单直接 方式二&#xff1a;使用Python可视化框架 优点&#xff1a;无需学习前端技术栈即可搭建一个web。 streamlit&#xff1a;⭐️⭐️⭐️⭐️gra…

炒美股怎么开户?

近年来&#xff0c;随着国内投资者对境外投资需求的不断增长&#xff0c;炒美股逐渐成为许多投资者的选择。然而&#xff0c;随着监管政策的不断完善&#xff0c;传统的互联网券商开户方式已经不再适用。那么&#xff0c;对于想要入场美股市场的投资者来说&#xff0c;该如何开…

太牛逼了,用ComfyUI中一键完成电商模特换装换背景!商业级教程附上!

&#x1f310; 大背景&#xff1a;电商时代的画卷正在翻页 在全球电子商务风起云涌的今天&#xff0c;市场竞争愈发激烈。商家们始终在寻求提高效率、减少成本和增强用户体验的新方法。然而&#xff0c;一个关键问题一直困扰着电商行业——**如何高效且经济地展示商品&#xff…