我已经阅读了一些 相关的 问题memcpy
,但没有关于和之间的速度比较strncpy
。
您建议如何跟踪关键部分中的字符串内容?
- 避免动态内存分配
- 代码的优雅和可读/可理解(几行代码)
- 快速处理(指令少,防止分支未命中)
- 能够被编译器优化(或已经使用优化指令的实现)
我在考虑c函数:
memcpy
需要计算最小长度(参见coliru.stacked-crooked.com上的片段)void copy (char dst[20], const std::string& src) { if (src.size() < sizeof(dst)) { memcpy (dst, src.c_str(), src.size()+1); } else { memcpy (dst, src.data(), sizeof(dst)-1); dst[sizeof(dst)-1] = 0; } }
strncpy
搜索终止空字节和不必要的填充所有最终字节(见代码片段)void copy (const std::string src, char (*dst)[20]) { strncpy (dst, src.c_str(), sizeof(dst)-1); dst[sizeof(dst)-1] = 0; }
std::string::copy
正如dyp的评论所建议的......还有其他想法吗?
可以执行基准测试,但它应该基于多个编译器/版本、不同的标志集和不同的硬件/操作系统。我更喜欢基于您的反馈/背景/专业知识或数学知识的答案......
由于这是一个一般性问题,搜索相同相关问题的人会喜欢一般性答案,而不是我自己当前的具体案例。
供您参考,一个线程需要在文件中写入一些std::string
内容,以便另一个线程可以更改它们的内容。我无法更改此其他线程,并且此其他线程非常忙。如果我不锁定(互斥/自旋锁)字符串副本,我有时会遇到一些问题。因此,我想快速复制这些std::string
并将它们写在锁定部分之后。