首页 > 编程语言 >C++ 返回值优化

C++ 返回值优化

时间:2024-03-19 20:00:30浏览次数:30  
标签:返回 函数 对象 C++ 编译器 返回值 拷贝 优化

1. 函数返回机制

函数返回值的传递分为两种情况:

  • 当返回的对象大小不超过8字节时,通过寄存器(eax edx)返回。
  • 当返回的对象大小大于8字节时,通过栈返回。此处需要注意的时候,如果返回的是struct或者class对象,即使其大小不大于8字节,也是通过栈返回的。

在通过栈返回的时候,栈上会有一块空间来保存函数的返回值。当函数结束的时候,会把要返回的对象拷贝到这块区域,对于内置类型是直接拷贝类类型的话是调用拷贝构造函数。这块区域又称为函数返回的临时对象

2. 编译器禁止优化

编译器提供了个编译选项-fno-elide-constructors来禁用返回值优化。

当一个函数返回一个对象实例的时候,理论上会产生临时变量,那必然会导致新对象的构造和旧对象的析构,这对性能是有影响的。C++标准允许省略拷贝构造函数简单来说,就是在调用的地方,将需要初始化对象的引用作为函数参数传递给函数,进而避免不必要的拷贝。

编译器对函数返回值优化的方式分为RVO和NRVO(自c++11开始引入),在后面的文章中,我们将对该两种方式进行详细分析。

标签:返回,函数,对象,C++,编译器,返回值,拷贝,优化
From: https://www.cnblogs.com/love-9/p/18083814

相关文章

  • C++ volatile
    1.volatile关键字C++中的volatile关键字和const对应,用来修饰变量,通常用于建立语言级别的memorybarrie。volatile关键字是一种类型修饰符,用它声明的类型变量表示可以被某些编译器未知的因素更改,比如:操作系统、硬件或者其它线程等。遇到这个关键字声明的变量,编译器对访......
  • C++ static
    1.隐藏(static函数,static变量均可)当同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性。如果加了static,就会对其它源文件隐藏。利用这一特性可以在不同的文件中定义同名函数和同名变量,而不必担心命名冲突。static可以用作函数和变量的前缀,对于函数来讲,sta......
  • C++高级面试题:解释 C++ 中的函数对象适配器
    解释C++中的函数对象适配器函数对象适配器是C++中的一种编程技术,用于修改或增强现有的函数对象的行为。它们通常通过组合或包装现有的函数对象来实现所需的功能。函数对象适配器允许我们在不修改原始函数对象的情况下,对其进行修改或扩展。这样可以实现代码的重用和可......
  • C++ static和const
    const定义的常量在超出其作用域之后其空间会被释放;static定义的静态常量在函数执行后不会释放其存储空间;1.staticstatic表示的是静态的。类的静态成员函数、静态成员变量是和类相关的,而不是和类的具体对象相关的。即使没有具体对象,也能调用类的静态成员函数和成员......
  • const,static深度总结——c++穿透式分析
         前言;c++类和对象的知识点中除了几种默认函数,比较重要的还有使用const和static修饰成员相关知识点。const在c++中特性很简单。但是在使用中,比较容易疏忽大意出现问题。static特性也很简单,但是比起const来要直接的多。在使用中只要熟练语法以及底层原理。就......
  • C++ memcpy、memmove
    函数原型:void*memcpy(void*dest,constvoid*src,size_tcount);void*memmove(void*dest,constvoid*src,size_tcount);memcpy和memmove相同点:都是用于从src拷贝count个字节到destmemcpy和memmove区别:如果目标区域和源区域有重叠的话:memcpy不能够确保源......
  • 安卓低机型卡顿分析以优化方案
    当前状况安装低端机型H5页面可能存在丢帧问题丢帧卡顿可能原因分析现象分析呈现速度缓慢:在呈现速度缓慢的帧数较多的页面,当超过50%的帧呈现时间超过16ms毫秒时,用户感官明显卡顿。帧冻结的绘制耗时超过700ms,为严重卡顿问题。卡顿忽略FPS<=2的页面:因为人的视觉暂留100400......
  • 记录工作过程中一次业务优化
    1需求用户需要输入身份证和姓名进行登录,登录时需要判断是否存在在数据库存在,登录成功后需要记录登录的信息以及微信Id,如果用到不同的微信账号,需要记录多次记录。2设计2.1数据库设计CREATETABLE`ExamDefine`(`Id`varchar(36)NOTNULLCOMMENT'主键编码',`ExamNam......
  • c++学习记录 STL—常用查找算法
    一、算法简介find               //查找元素find_if             //按条件查找元素adjacent_find       //查找相邻重复元素binary_search      //二分查找法count        ......
  • 优化员工,如何把艰难的抉择变简单?
    最近在大环境不太好的情况下,看到不少coder发帖说被优化掉的。作为领导者,一边是友情,一边是KPI;一边是团队凝聚力,一边是成本控制。其实这种两难非常折磨人,我把自己在辞退员工时的思考方法整理了一下跟大家分享。说明,这里讨论的范围是优化员工而非主管、高管。1、未来1-3年的绩效从......