拷贝优化

作者: 咸味奥利奥 | 来源:发表于2016-08-11 14:49 被阅读0次

在上C++课的时候,老师会提到C++函数传值和传引用的区别,特别会强调传值时,会产生一次拷贝。如果返回值,那么返回时也会产生一次拷贝。如果传值不是基本数据类型,而是一个很大的类、或者结构,就会造成额外的内存调用,影响效率。

MyBigClass foo(MyBigClass a)
{
  return a;
}

C++11以来,这种说法已经不能完全成立了。C++11标准规定编译器可以做出一定的优化不去调用拷贝构造函数。在gcc和clang里,这个优化可以通过-felide-constructors来实现。相反地,通过使用-fno-elide-constructors,就可以关闭这个编译器优化,该拷贝的还是会拷贝。

需要特别注意的是,即使拷贝构造函数、移动构造函数有特殊的定义,这个编译器优化还是会起效果。也就是说,自定义的拷贝/移动构造函数,可能因为被优化去除,所以没有按照设计执行。另外,不同的编译器可能会有不同的优化策略,导致最后出现的结果不同,在移植代码的时候要额外留心。

相关文章

  • 拷贝优化

    在上C++课的时候,老师会提到C++函数传值和传引用的区别,特别会强调传值时,会产生一次拷贝。如果返回值,那么返回...

  • 关于继承

    继承的实现方法 属性拷贝 浅拷贝 深拷贝 原型继承 原型式继承 原型链继承 组合继承(深拷贝+优化后的原型式继承)...

  • NIO

    传统IO拷贝 4次 切换 3次DMA直接内存拷贝(不使用CPU)mmap优化 内存映射 4次切换 3次拷贝send...

  • NIO与零拷贝

    1 零拷贝原理 1.1 传统IO4次拷贝3次切换 2.1优化后3次拷贝2次切换 零拷贝是从操作系统角度看的,是没有...

  • nginx优化(二)io优化 直接IO与零拷贝

    nginx优化(二)io优化 直接io与零拷贝 nginx io相关基础配置 debug_points abort...

  • IO-Zero Copy

    要说 IO 的性能优化就不得不提 Zero Copy(零拷贝),虽然名字叫零拷贝,但其实并不是完全没有拷贝过程,而...

  • js深拷贝广度优先及深度优先处理Symbol

    js对象深拷贝,文章使用了广度优先和深度优先,同时也出来了symbol类型的拷贝。 文章转载优化来源:

  • golang程序性能优化方法----不断更新

    常见套路:异步、去锁、复用、零拷贝、批量,另外要说避免过早优化、业务逻辑层面的优化要先行 1.cpu耗时优化 ma...

  • 关于 CopyOnWriteArrayList 的一个简单优化

    一、优化动机 COW 简介:增删改都会加锁并拷贝工作数组,在拷贝数组上做完增删改操作后,会把拷贝数组切换为工作数组...

  • I/O 性能问题定位与优化

    I/O问题定位 I/O性能优化 应用程序优化 使用 mmap 代替 read/write,减少内存拷贝次数 需要同...

网友评论

    本文标题:拷贝优化

    本文链接:https://www.haomeiwen.com/subject/tqcdsttx.html