c++ - strncpy 需要很长时间

标签 c++ strncpy

我最近遇到了一些遗留代码,并注意到有时(并非总是)以下代码片段需要很长时间才能执行。

#define NUM_OF_RECORDS 100000
char* pzBuffer = new char[NUM_OF_RECORDS + 1];
strncpy(pzBuffer, "", NUM_OF_RECORDS);

目标似乎是初始化 pzBuffer,我同意 memcpy 或 memset 是更好的选择。我想弄清楚为什么要花时间,以及这里的用法是否正确。

最佳答案

使用 memset() 可以做得更好,原因如下:

1)strncpy() 在单独的“字符”级别工作,这意味着它将一个接一个地遍历所有字符(在您的情况下为 ~NUM_OF_RECORDS 次迭代)。

2)memset() 在 block 级工作,其中一个 block 由 N 个字节组成。虽然这意味着遍历 block 的各个字节,但此函数是为优化 w.r.t. 而设计的。大块大小,当涉及大块时,通常会产生更好的性能。

我建议您创建代码的变体 1) 使用 memset 2) 其他与 strncpy。然后,将两者编译生成汇编代码,找出指令之间的区别。

关于c++ - strncpy 需要很长时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44616404/

相关文章:

HTTPS 的 C++ 编程

c++ - 如何创建一个存储指向成员函数的指针的类(C++)

c++ - 我可以在 Xcode 中使用 C++11 吗?

c++ - 将 char 数组连接在一起

c - strncpy 不能正确存储字符 C

c - strncpy 不是比 strcpy 更好吗?

使用 url :port/url in getaddrinfo 的 c++ 套接字编程

c - glibc 中的 strncpy 实现太复杂

c++ - strncpy 到已经创建的 char []

c++ - 为什么我不能使用 std::get