当前位置: 首页 > news >正文

河南建设资格执业网站躺平淘宝设计家官网

河南建设资格执业网站,躺平淘宝设计家官网,wordpress能用的插件吗,长春好的做网站公司有哪些📙 作者简介 :RO-BERRY 📗 学习方向:致力于C、C、数据结构、TCP/IP、数据库等等一系列知识 📒 日后方向 : 偏向于CPP开发以及大数据方向,欢迎各位关注,谢谢各位的支持 目录 1. 前言2.概念3.特性…

📙 作者简介 :RO-BERRY
📗 学习方向:致力于C、C++、数据结构、TCP/IP、数据库等等一系列知识
📒 日后方向 : 偏向于CPP开发以及大数据方向,欢迎各位关注,谢谢各位的支持


在这里插入图片描述


目录

  • 1. 前言
  • 2.概念
  • 3.特性
  • 4.内联与宏


1. 前言

内联函数是C++为提高程序运行速度所做的一项改进。常规函数和内联函数之间的主要区别不在于编写方式,而在于C++编译器如何将他们组合到程序中。要了解内联函数与常规函数之间的区别, 必须深入到程序内部。

编译过程的最终产品是可执行程序——由一组机器语言指令组成。运行程序时,操作系统将这些指令载入到计算机内存中,因此每条指令都有特定的内存地址。计算机随后将逐步执行这些指令。有时(如有循环或分支语句时),将跳过一些指令,向前或向后跳到特定地址。常规函数调用也使程序跳到另一个地址(函数的地址),并在函数结束时返回。执行到函数调用指令时,程序将在函数调用后立即存储该指令的内存地址,并将函数参数复制到堆栈(为此保留的内存块),跳到标记函数起点的内存单元,执行函数代码(也许还需将返回值放入到寄存器中),然后跳回到地址被保存的指令处(这与阅读文章时停下来看脚注,并在阅读完脚注后返回到以前阅读的地方类似)。来回跳跃并记录跳跃位置意味着以前使用函数时,需要一定的开销。

C++内联函数提供了另一种选择。内联函数的编译代码与其他程序代码“内联”起来了。也就是说,编译器将使用相应的函数代码替换函数调用。对于内联代码,程序无需跳到另一个位置处执行代码,再跳回来。因此,内联函数的运行速度比常规函数稍快,但代价是需要占用更多内存。如果程序在10个不同的地方调用同一个内联函数,则该程序将包含该函数代码的10个副本(参见下图)。

在这里插入图片描述

应有选择地使用内联函数。如果执行函数代码的时间比处理函数调用机制的时间长,则节省的时间将只占整个过程的很小一部分。如果代码执行时间很短,则内联调用就可以节省非内联调用使用的大部分时间。另一方面,由于这个过程相当快,因此尽管节省了该过程的大部分时间,但节省的时间绝对值并不大,除非该函数经常被调用。


2.概念

以inline修饰的函数叫做内联函数,编译时C++编译器会在调用内联函数的地方展开,没有函数调
用建立栈帧的开销,内联函数提升程序运行的效率。
查看方式:

  1. 在release模式下,查看编译器生成的汇编代码中是否存在call Add
  2. 在debug模式下,需要对编译器进行设置,否则不会展开(因为debug模式下,编译器默认不
    会对代码进行优化,以下给出vs2013的设置方式)

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述


3.特性

  1. inline是一种以空间换时间的做法,如果编译器将函数当成内联函数处理,在编译阶段,会
    用函数体替换函数调用,缺陷:可能会使目标文件变大,优势:少了调用开销,提高程序运
    行效率。
  2. inline对于编译器而言只是一个建议,不同编译器关于inline实现机制可能不同,一般建
    议:将函数规模较小(即函数不是很长,具体没有准确的说法,取决于编译器内部实现)、不
    是递归、且频繁调用的函数采用inline修饰,否则编译器会忽略inline特性
  3. inline不建议声明和定义分离,分离会导致链接错误。因为inline被展开,就没有函数地址
    了,链接就会找不到

要使用这些特性,必须采取以下几个措施之一:

  • 在函数声明前加上关键字inline
  • 在函数定义前加上关键字inline

通常的做法是省略原型,将整个定义(即函数头和所有函数代码)放在本应该提供原型的地方


4.内联与宏

inline 工具是C++新增的特性。C语言使用预处理器语句#define来提供宏——内联代码的原始实现。例如,下面是一个计算平方的宏:

#define square(x) x*x

这并不是通过传递参数实现的,而是通过文本替换来实现的——X是“参数”的符号标记。

a = square(5.0)   --->    a = 5.0 * 5.0
b = square(4.5+7.5)   --->    b = 4.5 + 7.5 * 4.5 + 7.5
c = square(s++)   --->    c = s++ * s++

上述例子只有一个能正常运行,其他的均达不到我们想要的目的,但是可以通过打括号来进行改进
但很容易出现类似的问题。即宏不能按值传递。
宏的优点:

1.增强代码的复用性。
2.提高性能。

缺点:

1.不方便调试宏。(因为预编译阶段进行了替换)
2.导致代码可读性差,可维护性差,容易误用。
3.没有类型安全的检查 。

内联是传递表达式,所以不会出现使用宏所导致的错误
通过对比可以看到,内联功能是远远超过宏定义的,我们在学习中要多去将以前使用宏定义的地方多去考虑使用内联函数

http://www.yayakq.cn/news/190894/

相关文章:

  • 长沙网站建设策划自己写的html放入wordpress
  • 做网站图片属性wordpress手机底部导航
  • 建设网站意义网站做支付接口
  • 网站开发建设价格附件湖北省和建设厅网站首页
  • 西安wordpress建站企业管理咨询服务协议
  • 天津网站建设推广服务山东省东营市建设局网站
  • 音乐网站建设论文的目的和意义手机上编写app
  • php网站服务器搭建网站可分析
  • 全国建造师查询网站免费网站后台
  • 荆门网站建设施工企业的内容
  • 网站建设分享网站数据采集怎么做
  • 阿里云 网站建设方案书建设网站平台需要什么硬件配置
  • 网站制作昆山织梦 和wordpress
  • 网站主机选择网站建设外包费用
  • 网站建设 国鸿网站几个模板最好
  • 建设农家书屋官方网站竞价账户托管公司哪家好
  • 即给做网站又给我们做推广的公司呢c2c模式的特点有哪些
  • 深圳自适应网站推广价格学网站设计
  • 公司和个人均不能备案论坛类网站网站怎么做宣传
  • 做网站需要自备服务器吗广州市城乡建设部网站首页
  • 有什么做美食的网站毕节地区建设网站
  • 做推文的网站知乎医疗协助平台网站建设方案
  • 小说下载网站哪个好企业宣传片策划方案
  • 做外贸收费的服装网站两学一做知识竞答网站
  • 公司网站怎么做能被别人搜索到建设银行U盾不自己弹网站了
  • 珠海哪里做网站的土石方工程网站
  • 黑龙江生产建设兵团网站app开发公司费用
  • 网站对于企业的制作主页的软件
  • 如何用群晖nas做网站微讯信息群号1000000
  • 本地建站教程番禺网站建设专家