我在共享内存中有一个大字符*,我想将其复制到字符串中,但是我不想添加额外的副本或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为单位。
最快的是
shm.ReadStr(std::string& str, size_t len) {
str.assign(shm_src, len);
}
不需要调整大小,std :: string会做到最好。