C++ 内联函数(inline)

news2024/9/20 10:41:35

内联函数:就是在函数前加inline 让函数在调用的地方直接展开

可是内联函数有什么作用呢??

我们都知道,如果调用一个函数的话,会建立栈帧,在建立栈帧的时候会进行压栈等一系列操作。

而内联函数会在调用的地方展开,并不会建立栈帧。

下面我们来看一下

如果我们像调用这个函数的话,我们可以看一下它的汇编代码

我们可以看到,它的汇编里面是call了这个函数。call就是调用这个函数,如果一旦调用话就会建立栈帧 

上面是我们普通的函数,如果像让它成为内联函数,那么就在它前面加inline

这样外前面加inline就是内联函数了,那么我们来看一下它的汇编代码

 

我们可以看到,我们调用这个函数的时候是直接展开了,而并不是去call这个函数

那么所有的函数都可以成为内联函数吗??

我们可以想一下,内联函数是在调用的地方展开,如果代码量太大展开了会怎么样? 

我们可以想到的是,如果代码量太大,并且有很多地方调用了这个函数,那么在编译连接之后五一会增加代码量,会让编译好的汇编代码膨胀,导致可执行文件变大,这样就得不偿失了。

那么只有代码量太大不可以成为内联函数吗?

实际上我们的递归函数也不可以成为内联函数,还有就是声明和定义分离也不可以

下面给大家看一下

 

这样是代码量过多,我们就不能是内联函数了

 

而代码量多,怎么样才算多呢??

在vs下10行以上就不可以成为内联函数了

下面再看一下递归可不可以

 

实际上递归也是不可以的

还有就是声明和定义分离也不可以 

 

那么内联函数在什么情况下适合呢?

我们可以想一下,内联函数是在调用的地方展开,可以减少建立栈帧的开销,并且代码量不能太大,所以根据这个条件我们就可以想到,内联函数适应于,代码短小,并且频繁被调用的函数。 

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

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

相关文章

Nginx和tomcat反向代理

七层反向代理 实验准备:准备三台虚拟机 192.168.146.20 tomcat(两个) 192.168.146.30 tomcat 192.168.146.50 七层反向代理(nginx) 部署虚拟机192.168.146.20(两个tomcat已部署完毕) …

SwiftUI 4.0(iOS 16)极简实现一个美美哒的多选 Toggle 按钮组

概览 在 SwiftUI 4.0 之前,想要实现如下效果的多选/全选 Toggle 按钮组是要写不少行代码滴: 不过,在 iOS 16 之后我们仅用1行代码即可搞定以上所有!在某些场合下这非常有用哦。 在本篇博文中,我们就来看看如何实现它…

2023年的深度学习入门指南(6) - 剪枝和量化

2023年的深度学习入门指南(6) - 剪枝和量化 从这一节开始,我们要准备一些技术专项了。因为目前大模型技术还在快速更新迭代中,各种库和实现每天都在不停出现。因为变化快,所以难免会遇到一些问题。对于细节有一定的把握能力起码可以做到出问…

5.1 数值微分

学习目标: 作为数值分析的基础内容,我建议你可以采取以下步骤来学习数值微分: 掌握微积分基础:数值微分是微积分中的一个分支,需要先掌握微积分基础知识,包括导数、极限、微分等。 学习数值微分的概念和方…

Scillus | 来吧!它可以大大简化你的Seurat分析流程哦!~(二)(高级可视化)

1写在前面 不知道大家那里天气热了没有,苦逼的我虽然“享受”着医院的恒温,但也并没有什么卵用,毕竟我只是个不可以生锈的“小螺丝”。🥲 上期介绍了Scillus包的基本功能,如何进行数据的预处理及其可视化。&#x1f92…

分享github上比较热门的ChatGPT项目,值得收藏

🔗 运行环境:chatGPT 🚩 撰写作者:左手の明天 🥇 精选专栏:《python》 🔥 推荐专栏:《算法研究》 #### 防伪水印——左手の明天 #### 💗 大家好🤗&#x1f9…

Elasticsearch painless脚本教程(包含Java API和SpringDataElasticsearch调用脚本)

Elasticsearch painless脚本 1.什么是painless2.painless的特性3.使用kibana进行准备操作3.1 使用kibana创建索引和映射3.2 使用kibana添加测试数据 4.使用painless执行查询操作关于脚本查询须知4.1 字段查询脚本4.1 排序查询脚本 5.如何使用painless执行更新操作关于脚本查询须…

Spring Security 04 自定义认证

登录⽤户数据获取 SecurityContextHolder Spring Security 会将登录⽤户数据保存在 Session 中。但是,为了使⽤⽅便, Spring Security 在此基础上还做了⼀些改进,其中最主要的⼀个变化就是线程绑定。当⽤户登录成功后,Spring Security 会将登录成功的⽤户…

Node内置模块 【crypto加密模块】

文章目录 🌟前言🌟crypto加密模块🌟Crypto模块介绍🌟Hash算法🌟Hash算法介绍🌟Hash算法之MD5🌟算法简介🌟MD5加密使用 🌟Hash算法之SHA1🌟算法简介&#x1f3…

二叉树经典题题解

目录 🍅1.单值二叉树🍅 🍉 2.相同的树🍉 🍊3.对称二叉树🍊 🍎4.另一颗树的子树🍎 🍏5.翻转二叉树🍏 🍑6.平衡二叉树🍑 &#x1f3…

【LeetCode: 1027. 最长等差数列 | 暴力递归=>记忆化搜索=>动态规划】

🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…

SHELL的脚本编辑与运行

目录 1.编写脚本for1.sh,使用for循环创建20账户,账户名前缀由用户从键盘输入,账户初始密码由用户输入,例如:test1、test2、test3、、test10 a.编辑脚本 b.运行脚本 c.进行检验 2.编写脚本for2.sh,使用for循环,通过…

如何把aac转化为mp3,4个处理方法教给你

一般情况下,将 AAC 文件转换为 MP3 文件有以下几种情况:设备不兼容:AAC 格式通常用于苹果设备上。如果您想在其他设备上播放音频文件,如 Android 手机、MP3 播放器等,就需要将其转换为 MP3 格式。需要更好的兼容性&…

机器学习(七):基于多项式贝叶斯对蘑菇毒性分类预测分析

系列文章目录 作者:i阿极 作者简介:Python领域新星作者、多项比赛获奖者:博主个人首页 😊😊😊如果觉得文章不错或能帮助到你学习,可以点赞👍收藏📁评论📒关注…

第六章 原型模式

文章目录 前言一、克隆羊问题sheep类clint 调用方 二、引入原型模式动态克隆对象sheep类clint 类 三、原型模式在Spring框架中源码分析四、深拷贝与浅拷贝完整代码DeepCloneableTargetDeepProtoTypeClient2 五、原型模式的注意事项和细节 前言 一、克隆羊问题 sheep类 package…

mysql查询字段未加引号问题及隐式转换

1. 问题重现 最近线上出了个问题,用户明明没有投票,却提示已投票,我查询数据,刚开始没有查出数据,后来却查出数据了,以为没有问题,后来以为是插入的时候通过int类型插入,导致varcha…

美国最大公共养老基金之一Strs Ohio不断增持IonQ股票

​ (图片来源:网络) 截至2022年12月31日第四季度末,美国最大的公共养老基金之一Strs Ohio发布报告称,其一直在增持IonQ,Inc.(纽约证券交易所代码:IONQ)的股份。资产管理公…

如何在云服务器/云主机上部署最新版本的Hadoop3.3.5(Ubuntu20.0.4)

在云服务器上部署Hadoop 步骤1:更新系统 sudo apt-get update sudo apt-get upgrade步骤2:安装Java Hadoop需要Java运行环境。首先,安装OpenJDK 8: sudo apt-get install openjdk-8-jdk检查Java版本: java -versi…

上海车展:比亚迪宋L概念车全球首发,这是要硬扛特斯拉?

纵观2023年的新能源汽车市场,特斯拉可以说当仁不让地成为了全球最为“吸睛”的车企之一。凭借一系列令无数人瞠目结舌的降价举措,特斯拉给全球汽车市场带来了强烈冲击。虽然特斯拉上海工厂已经接近满负荷运转,但是面对雪片般飞来的订单依然供…

SpringBoot设置动态定时任务

SpringBoot设置动态定时任务 1.准备工作 搭建SpringBoot工程 引入相关依赖 <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><depende…