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

中国移动采购与招标网wordpress 主题优化

中国移动采购与招标网,wordpress 主题优化,信誉好的河南网站建设,没有装wordpressC初学者指南第一步—14.函数调用机制 文章目录 C初学者指南第一步---14.函数调用机制1.记住#xff1a;内存的结构2.函数调用是如何工作的3. 不要引用局部变量4. 常见编译器优化5. Inlining内联 1.记住#xff1a;内存的结构 堆#xff08;自由存储#xff09; 用于动态存…C初学者指南第一步—14.函数调用机制 文章目录 C初学者指南第一步---14.函数调用机制1.记住内存的结构2.函数调用是如何工作的3. 不要引用局部变量4. 常见编译器优化5. Inlining内联 1.记住内存的结构 堆自由存储 用于动态存储期对象例如 std::vector 的内容。空间大可以用于大容量存储大多数用于主内存。可以根据需要分配和释放任何对象。按照无特定顺序的分配释放 ⇒ 碎片化。分配速度慢需要为新对象找到连续未被占用的空间。 栈 自动存储期对象使用局部变量函数参数等。空间小通常只有几兆(M)字节。分配速度快新对象总是放在栈顶部。对象按它们创建的相反顺序被释放。无法释放顶端 最新的以下的对象。 2.函数调用是如何工作的 1该示例假定没有编译器优化例如内联用函数体替换函数调用返回类型优化等。 此外在函数调用时放入栈的确切顺序调用约定取决于平台CPU 架构 操作系统 编译器。 2程序开始。 3局部变量 y 被放入栈。 4 局部变量 i 被放入栈。 5 函数的返回值占位符被放入堆栈 6 当前指令的内存地址被放在栈上这样在离开被调用的函数后我们就知道从哪里恢复程序。 7 帧指针标记了当前函数的栈帧的开始。在当前栈帧内的一切都将被视为函数局部的。需要帧指针是因为不同的函数调用可能有不同大小的栈帧。 8 执行跳转到函数square的内存地址。 9 函数参数p放在栈上它的值由调用参数(y的值)决定。 注意返回地址、占位符、局部参数等放在栈上的顺序取决于平台的调用约定(CPU体系结构 OS 编译器)。 10 函数局部变量 x 放到栈上。 11 表达式 p * p 的结果被赋给 x。 12 语句return x将 x 的值复制到 返回值占位符。 13离开函数square时 堆栈的顶部位置减少到堆栈帧下方这意味着所有函数局部变量都从堆栈中弹出。 14 执行通过跳转到之前存储的返回地址返回到调用位置。 15 赋值语句int i …会导致返回值被复制到i中。 16 square函数的返回值被从栈中弹出。 17 局部变量k被放入栈。 18 程序结束所有关联的变量都会从栈中弹出。 3. 不要引用局部变量 如果我们把返回类型改为int会怎么样呢 1 2 在从square返回之前栈内容: 函数局部变量x函数参数p函数调用后的下一条指令的地址square返回值的占位符main函数的局部变量 y 和 i 3 语句return x;将 x 的地址复制到 返回值占位符。 4 离开函数square 栈的顶部位置降低到栈帧下方; 这意味着所有square函数的局部变量都会从栈中弹出。 通过跳转到先前存储的返回地址执行流程回到调用位置。 5 赋值 int i … 会导致返回值一个整数的内存地址被复制到引用 i 中。 x的内存位置实际上在栈的当前顶部位置之上。任何后续的栈分配都会导致它被其他值覆盖。 这将导致 未定义行为 这样的程序在运行时行为是未定义的/非确定性的因为它有时可能会工作如果 x 的内存没有被覆写有时可能不会。 4. 常见编译器优化 现代的 C 编译器进行多项优化尤其是在较高的优化级别 -O2 和 -O3使函数调用速度更快。 Return Value Optimization 返回值优化 (RVO) 适用于类似return Type{}; 或 return Type{argument,…}; 这样的语句。不会分配额外的占位符用于返回值也不会进行复制。相反外部对象 res 将直接在调用位置构造。这种优化是强制的即在 C17 版本中必定会执行。 Point foo (…) { …return Point{…}; } Point res foo();Named Return Value Optimization 命名返回值优化 NRVO 适用于类似 return local_variable; 这样的语句。不会分配额外的占位符用于返回值也不会进行复制。相反本地对象 loc 和外部对象 res 被视为同一个对象。这样在调用点仅会发生一次分配。这种优化不是必需的但几乎所有现代编译器都会尽可能地执行它。 Point foo (…) {Point loc;…return loc; } Point res foo();5. Inlining内联 调用小/短函数的地方被该函数的代码替换。 内联只会发生在编译器“看到”函数声明的同时也看到它的完整定义如果我们分别编译程序的不同部分这种情况就不一定会发生更多内容请参考《分离编译》章节。 这是 C 性能优势的一个来源。在许多其他语言比如 Java、C# 等中内联化要困难得多有时甚至是不可能的。这些语言通常具有始终开启的多态性这意味着所有/大多数函数/方法调用只能在运行时解析。 附上原文链接 如果文章对您有用请随手点个赞谢谢^_^
http://www.pierceye.com/news/894482/

相关文章:

  • 做断桥铝窗户的网站宿州推广公司
  • 网站优化制作东莞房价一览表
  • 屏显的企业网站应该怎么做沈阳网站推广优化公司哪家好
  • 外包服务有哪些汕头seo网站建设
  • 新公司网站怎么做推广wordpress 中文 seo 插件
  • 网站建设客户分析国家企业信息公示网(广东)
  • php网站开发技术文档天津市装修公司排名榜
  • qq群优惠券里面网站怎么做的长春网站建设找源晟
  • 如何建一个公司的网站百度快速收录入口
  • 网络市场营销湘潭seo优化
  • 网站建设的模块传奇合成版2合1雷霆版手游
  • wordpress快站怎么样js网站开发视频
  • 滕州市 网站建设公司合肥网站建设方案案例
  • 外贸网站推广企业ida设计公司上海
  • 网站怎么做图片转链湄潭建设局官方网站
  • 泰州品牌网站建设二建报名时间2023年报名时间
  • 企业网站优化兴田德润怎么样wordpress标签不输出文章
  • 百度站长平台论坛永嘉网站制作
  • 月嫂公司网站建设构思免费的短视频素材库
  • 2017做哪些网站致富邢台市行政区划图
  • 深圳和海枫建设集团有限公司网站国内外基于vue框架的网站建设现状
  • 珠海免费网站制作购物网站前台模板
  • 小程序软件制作网站捷克注册公司网站
  • 做网站细节电商网站建设 平台
  • 网站建设方案书1500全国中小企业网站
  • 阳江市建设局网站合肥最新消息今天
  • 做关于什么样的网站好货代去什么网站开发客户
  • 中国工程建设造价管理协会网站漳州seo顾问
  • 什么网站可以做2.5D场景网站过程建设
  • google移动网站建站十大原则室内装修工人培训班