c – 不分配任何char内存的const字符串构造函数?

c – 不分配任何char内存的const字符串构造函数?,第1张

概述我正在尝试优化我编写的一些代码来处理应用程序协议的多个层.我自由地使用了std :: string类,并且为了简单而不是过早优化而努力.应用程序太慢了,valgrind& gprof show我花了很多时间复制构造字符串,因为缓冲区向上移动到我的堆栈. 在我看来,在将chars从系统缓冲区复制到最低的应用程序缓冲区之后,我应该能够避免再次复制数据了:毕竟,它在向上移动堆栈时不会发生变异. 我的协议 我正在尝试优化我编写的一些代码来处理应用程序协议的多个层.我自由地使用了std :: string类,并且为了简单而不是过早优化而努力.应用程序太慢了,valgrind& gprof show我花了很多时间复制构造字符串,因为缓冲区向上移动到我的堆栈.

在我看来,在将chars从系统缓冲区复制到最低的应用程序缓冲区之后,我应该能够避免再次复制数据了:毕竟,它在向上移动堆栈时不会发生变异.

我的协议格式是一个“传输”,由一个或多个换行符终止的记录组成,每个记录由几个以制表符分隔的字段组成,并以特殊标记终止.例如.

RECORD 1\tHAS\tTHESE\tFIELDS\nRECORD 2\tLOOKS\tliKE\tTHIS\nEND-OF-TRANSMISSION\n

这将被组装在一个名为input_buffer的std :: string中.

传输的处理涉及从缓冲区中提取记录并将其传递给下一层;从记录中提取字段向量并将其传递给下一层;将字段存储到地图中.在每个阶段,在分配新的std :: strings时复制数据.

是否有可能将索引中的const字符串分配到input_buffer,并且长度…没有进行任何复制?例如,RECORD 2从偏移量26开始,长度为24个字符:

const std:string record (substr(input_buffer,26),24 );

我不熟悉字符串对象的内部,但它的性能保证似乎暗示某处有一个简单的char序列,而且几乎无疑是指向那些字符内存的指针.该指针可以初始化为属于另一个字符串的内存吗?

(我的编译器是g 4.7,但如果这是需要4.8的东西,我也很高兴知道这一点.)

解决方法 根据我的理解,这听起来像 boost::string_ref的一个很好的候选人. 你只需要做boost :: string_ref输入(input_buffer);然后将string_refs传递给堆栈.您唯一需要担心的是保持原始缓冲区始终存在. 总结

以上是内存溢出为你收集整理的c – 不分配任何char内存的const字符串构造函数?全部内容,希望文章能够帮你解决c – 不分配任何char内存的const字符串构造函数?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1226985.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存