码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 【C++】内联函数 ③ ( C++ 编译器 不一定允许内联函数的内联请求 | 内联函数的优缺点 | 内联函数 与 宏代码片段对比 )


    文章目录

    • 一、内联函数不一定成功
      • 1、内联函数的优缺点
      • 2、C++ 编译器 不一定允许内联函数的内联请求
      • 3、是否内联决定权在编译器手中
    • 二、内联函数 与 宏代码片段对比
      • 1、内联函数
      • 2、宏代码片段





    一、内联函数不一定成功




    1、内联函数的优缺点


    " 内联函数 " 不是在运行时调用的 ,

    " 内联函数 " 是 编译时 将 函数体 对应的 CPU 指令 直接嵌入到调用该函数的地方 ,

    从而 降低了 函数调用的开销 , 提高了程序的执行效率 ;


    内联函数 的 缺点 也很明显 , 就是会增加代码的大小 , 调用了多少次内联函数 , 就要拷贝多少次内联函数的代码指令到调用的地方 ;

    要谨慎使用 " 内联函数 " , 避免不必要的 开销 和 代码膨胀 ;


    2、C++ 编译器 不一定允许内联函数的内联请求


    由于 " 内联函数 " 会导致不必要的 开销 和 代码膨胀 , 因此 , C++ 编译器并不一定保证内联请求的成功 ;

    使用 inline 关键字 可以请求 C++ 编译器将函数进行内联 , 但是编译器并不一定会接受这个请求 ;


    权衡利弊 : " 内联函数 "是否 成功内联 取决于 C++ 编译器 的 实现 和 优化策略 ;

    • 内联函数 优点 是 可以减少函数调用的开销,提高程序的执行效率 ;
    • 内联函数 缺点 是 会增加代码的大小 , 会降低程序的性能 ;

    因此,编译器在决定 " 内联函数 " 是否 内联时 , 会进行权衡 内联带来的性能提升 和 代码大小增加的开销 ;


    3、是否内联决定权在编译器手中


    是否内联决定权在编译器手中 : 在 C++ 语言中,inline关键字只是对编译器的建议,编译器可以根据自己的 优化策略 自由决定是否内联函数 ;

    在 普通函数 声明和定义 位置 前面加上 inline 关键字 ,

    • 只是 建议 C++ 编译器将该函数内联 , 并不强制要求编译器内联函数 ,
    • 如果编译器决定不内联函数 , 该 内联函数 作用 等同于 普通函数 ;

    最终 内联函数 是否内联成功 , 由 编译器 决定 ;





    二、内联函数 与 宏代码片段对比




    1、内联函数


    " 内联函数 " 的 本质是 函数 , 其是一种 特殊的函数 ;


    " 内联函数 " 有 普通函数 的特征 , 即 :

    • 定义时 有 函数名 , 参数列表 , 返回值类型 , 函数体 ;
    • 执行时 有 参数检查 , 返回值类型检查 ;

    内联函数 的 inline 关键字 只是请求 C++ 编译器 将 该函数进行内联 , 具体 C++ 是否同意 , 需要根据 C++ 编译器的优化策略决定 , 可能同意 , 也可能不同意 ;

    如果 C++ 编译器 不同意 内联请求 , 则该 内联函数 就是 普通函数 , 当做 普通函数 进行调用处理 ;


    2、宏代码片段


    " 宏代码片段 " 本质 是 宏定义 ;

    宏代码片段 是由 预处理器 进行处理 , 执行的操作是 简单的文本替换 ;

    宏代码片段 不是函数 , 没有函数那么强大的功能 , 执行时不会进行 参数和返回值 的类型检查 , 没有编译的过程 ;

  • 相关阅读:
    【证明】线性空间的基本性质
    金仓数据库KingbaseES客户端编程接口指南-DCI(2. 概述)
    设计模式之单例模式
    【postgresql 基础入门】psql客户端的使用方法
    使用 Python 和 OpenCV 制作反应游戏
    springboot采用协同过滤算法的家政服务平台的设计与实现毕业设计源码260839
    Eureka Client启动后就关闭 Unregistering application xxx with eureka with status DOWN
    Step 1 搭建一个简单的渲染框架
    Yum方式安装Nginx
    虾皮规模毁约、毁 offer,操作太离谱了...
  • 原文地址:https://blog.csdn.net/han1202012/article/details/132644064
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号