如何避免std :: string :: resize太慢

问题描述 投票:0回答:1

我在共享内存中有一个大字符*,我想将其复制到字符串中,但是我不想添加额外的副本或init。理论上,一次复制就足够了。

我这样的代码

//params must be a string, because parent need. If params changed, I need copy other struct -> std::string. 
void Read(string *str) {
  size_t len;
  shm.ReadLen(len);
  str->resize(len); //malloc once and init once.
  shm.ReadStr(&((*str)[0]), len);//copy once
}

我的理想代码是

void Read(string* str) {
  size_t len;
  shm.ReadLen(len);
  str->reserve(len);//malloc once 
  shm.ReadStr(&((*str)[0]), len); //copy once 
  str.set_size(len);//???
}

我的问题:string.resize()太慢,在我的Read函数中花费了一半。

shm.ReadStr(char* dest, size_t len) {
    memcpy(dest, shm_src, len);
}

ReadStr函数属于我的同事。我不想更改它,但是如有必要,我可以更改它。

我的系统:gcc 5.3.0,以centos为单位。

c++
1个回答
0
投票

最快的是

shm.ReadStr(std::string& str, size_t len) {
    str.assign(shm_src, len);
}

不需要调整大小,std :: string会做到最好。

© www.soinside.com 2019 - 2024. All rights reserved.