C++ C++;使用string.resize()进行缓冲区复制操作

C++ C++;使用string.resize()进行缓冲区复制操作,c++,c++17,stdstring,C++,C++17,Stdstring,假设我正在调用一个函数,该函数将用一些数据填充给定的缓冲区: 填充缓冲区(char*buf,size\t buflen) 我希望填充的数据最终以std::string结束。我有两种方法 方法1: char mybuf[32]; populate_buffer(mybuf, 32); std::string mystr(mybuf, 32); 方法2: std::string mystr; mystr.resize(32); populate_buffer(mystr.data(), 32);

假设我正在调用一个函数,该函数将用一些数据填充给定的缓冲区:
填充缓冲区(char*buf,size\t buflen)

我希望填充的数据最终以
std::string
结束。我有两种方法

方法1:

char mybuf[32];
populate_buffer(mybuf, 32);
std::string mystr(mybuf, 32);
方法2:

std::string mystr;
mystr.resize(32);
populate_buffer(mystr.data(), 32);

什么更有效?

最好的方法是启动优化器和配置文件。运行几百万或十亿次迭代,看看需要多长时间。很难说在优化器处理完代码后,代码会是什么样子,因此,根据您想要的行为进行编程,让编译器知道需要什么指令,而不是为琐碎的细节操心,这通常是很有帮助的。编写最简单的代码,精确描述您希望发生的事情,然后进行测试以确保它满足您的性能需求。必要时将代码复杂化。@谁知道呢?也许在优化器使用它之后,方法2看起来像方法1。记住,你编写的C++代码是你想要发生的事情的描述。生成的实际代码是不同的,它可能看起来不像原始C++高级代码。查看CLAN的方法,方法1需要27个指令,而方法2只需要19个代码,而不是一个黑盒子。看起来
resize()
已经优化了,所以方法2应该更快。@Timo方法2应该更快。我只想澄清一下,这句话只对你的实验有效。你不能在这里做出任何一般性的结论。如果编译器看到了
poplate\u buffer
的定义,结果可能会不同。这也很大程度上取决于
populate\u buffer
的实际功能。@DanielLangr是的,这就是为什么这不是一个答案,我明确地描述了观察的参数。