memcpy如下所示使用它是否更好,或者std::copy()在性能方面更好用?为什么?
char *bits = NULL;
...
bits = new (std::nothrow) char[((int *) copyMe->bits)[0]];
if (bits == NULL)
{
cout << "ERROR Not enough memory.\n";
exit(1);
}
memcpy (bits, copyMe->bits, ((int *) copyMe->bits)[0]);
Run Code Online (Sandbox Code Playgroud) 我复制从N个字节pSrc来pDest.这可以在一个循环中完成:
for (int i = 0; i < N; i++)
*pDest++ = *pSrc++
Run Code Online (Sandbox Code Playgroud)
为什么这比memcpy或慢memmove?他们用什么技巧加快速度?
我什么时候可以memcpy使用它获得更好的性能?如何使用它?例如:
float a[3]; float b[3];
Run Code Online (Sandbox Code Playgroud)
是代码:
memcpy(a, b, 3*sizeof(float));
Run Code Online (Sandbox Code Playgroud)
比这快?
a[0] = b[0];
a[1] = b[1];
a[2] = b[2];
Run Code Online (Sandbox Code Playgroud) memcpyGCC中有一个C99/posix 函数版本:__builtin_memcpy.
有时它可以被GCC替换为内联版本的memcpy,在其他情况下,它被替换为调用libc的memcpy.例如,这里注意到:
最后,在编译器注释中,__ builtin_memcpy可以回退到发出memcpy函数调用.
这个选择的逻辑是什么?在其他gcc兼容的编译器中逻辑是否相同,如clang/llvm,intel c ++编译器,PCC,suncc(oracle studio)?
当我更喜欢使用__builtin_memcpy而不是简单的memcpy?
我开始研究IT,现在我和朋友讨论这段代码是否效率低下.
// const char *pName
// char *m_pName = nullptr;
for (int i = 0; i < strlen(pName); i++)
m_pName[i] = pName[i];
Run Code Online (Sandbox Code Playgroud)
他声称例如memcopy会像上面的for循环那样做.我不知道这是不是真的,我不相信.
如果有更有效的方法或者效率低下,请告诉我原因!
提前致谢!
c++ ×4
performance ×3
loops ×2
memcpy ×2
allocation ×1
built-in ×1
c ×1
c99 ×1
copying ×1
gcc ×1
memory ×1
optimization ×1
strlen ×1