gpt4 book ai didi

c++ - 如何快速复制 std::string 内容?

转载 作者:行者123 更新时间:2023-11-30 02:49:20 27 4
gpt4 key购买 nike

<分区>

我已阅读 some related questions ,但没有关于 memcpystrncpy 之间的速度比较。

您有什么建议来跟踪关键部分中的字符串内容?

  • 避免动态内存分配
  • 优雅的代码和可读/可理解的(很少的代码行)
  • 快速处理(指令少,防止分支未命中)
  • 能够被编译器优化(或已经使用优化指令实现)

我在想功能:

  1. 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;
    }
    }
  2. strncpy搜索终止空字节和不必要的填充所有最终字节(参见 snippet )

    void copy (const std::string src, char (*dst)[20])
    {
    strncpy (dst, src.c_str(), sizeof(dst)-1);
    dst[sizeof(dst)-1] = 0;
    }
  3. snprintf ?

  4. std::string::copy正如 dyp 所建议的那样的评论...

  5. std::copy正如同一个 dyp 再次建议的那样的评论...

  6. 还有其他想法吗?

可以执行基准测试,但它应该基于多个编译器/版本、不同的标志集和不同的硬件/操作系统。我更喜欢基于您的反馈/背景/专业知识或数学知识的答案...

由于这是一个一般性问题,搜索相同相关问题的人会喜欢一般性答案,而不是我自己当前的具体情况。

供您引用,一个线程需要在文件中写入一些 std::string,它们的内容可以被另一个线程更改。我无法更改其他线程,而其他线程非常忙。如果我不锁定(互斥锁/自旋锁)字符串拷贝,我有时会遇到一些问题。因此我想快速复制这些 std::string 并将它们写在锁定部分之后。

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com