我想在没有新的内存分配和复制的情况下在C或C++中连接2个字符串.可能吗?
可能的C代码:
char* str1 = (char*)malloc(100); char* str2 = (char*)malloc(50); char* str3 = /* some code that concatenates these 2 strings without copying to occupy a continuous memory region */
然后,当我不再需要它们时,我只是这样做:
free(str1); free(str2);
或者如果可能的话,我想在C++中实现相同的功能,使用std::string
或者可能char*
,但是在str3上使用new
和delete
(可能是void operator delete ( void* ptr, std::size_t sz )
运算符(C++ 14)).
关于字符串连接有很多问题,但我没有找到一个问相同的问题.
不,这是不可能的
在C中,malloc操作返回彼此没有关系的内存块.但在C语言中,字符串必须是连续的字节数组.所以没有复制就无法扩展str1,更不用说连接了.
对于C++,也许可能会对绳索感兴趣:请参阅此答案.
绳索分配在不必连续的块中.这支持O(1)连接.但是,访问器使它显示为单个字节串.我确定将绳索转换回std :: string或C风格的字符串会占用一个副本,但这可能是最接近你想要的.
此外,担心复制几个字符串的成本可能是一个不成熟的优化.除非您要移动大量数据,否则无关紧要