C++:从 C++11 中的内存效率角度来看,返回字符串是否可行?

标签 c++ string memory return-value

就性能而言,返回 string 是否可以?来自 C++11 中的任意函数?如果不建议“直接返回”,返回字符串的首选方式是什么?

据我所知,C++ 中的字符串不是引用计数的,因为标准禁止这种做法。从我(可能不知情)的角度来看,这意味着复制构造函数将返回一个字符串,从而导致可能很大的 memcpy 。这是正确的吗?

将函数定义为 string MyClass::makeString(...) 非常简单明了。而不是类似 void MyClass::makeString(string & ret, ...) 。另一方面,从性能角度来看,后一种方法似乎更好。

最佳答案

当您从函数中返回 std::string 时,该字符串被声明为本地非静态变量,编译器可以积极优化代码,以便很少或根本不进行复制。完毕。当涉及到字符串时,您不应该担心这对性能的影响。

即使在您确定会进行大量复制的情况下,您也不应该担心效果,直到您的探查器指出特定代码是低效率的根源。根据我的经验,这种情况很少发生:一般来说,与样板问题(例如复制一两个额外的字符串)相比,在低于标准效率的算法上浪费了更多的 CPU 时间。

关于C++:从 C++11 中的内存效率角度来看,返回字符串是否可行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23872272/

相关文章:

Visual Studio 上的 C 或 C++

java - JVM 中有多少个对象是太多了?

c# - c#中set obj为null是否需要释放内存?

c++ - OSX 上的 CMake 和 Boost - 没有制定目标的规则

c++ - 如何正确地转换数据开始指针(这甚至是一种好习惯)?

c# - 如何在C#中去除URL中的www、http/https等字符串

javascript - 看似简单的 javascript 字符串构建

c++ - 如何将数组指向嵌入式系统上的某个特定内存地址

c++ - 如何从 C++ 中的资源文件加载游标组?

c++ - 将二维 vector 初始化为类变量 C++