c - 结构复制的效率

标签 c struct memcpy

C 中两个结构变量之间拷贝时,后端是memcpy 还是逐项拷贝?这可以依赖于编译器吗?

最佳答案

它在很大程度上依赖于编译器

考虑一个只有 2 个字段的结构

struct A { int a, b; };

在 DEBUG 构建的 VS2015 中复制此结构会生成以下 asm。

struct A b;

b = a;

mov         eax,dword ptr [a]  
mov         dword ptr [b],eax  
mov         ecx,dword ptr [ebp-8]  
mov         dword ptr [ebp-18h],ecx  

现在添加一个 100 字符的数组,然后复制它

struct A
{
    int a;
    int b;
    char x[100];
};

struct A a = { 1,2, {'1', '2'} };
struct A b;

    b = a;

mov         ecx,1Bh  
lea         esi,[a]  
lea         edi,[b]  
rep movs    dword ptr es:[edi],dword ptr [esi]  

现在基本上是从 a 的地址到 b 的地址完成一个 memcpy。

这取决于很多结构的布局、编译器、优化级别......很多因素。

关于c - 结构复制的效率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35790563/

相关文章:

c - 对函数调用的 undefined reference

c - 使用 strtok 吐出数组并将标记存储在唯一的以 null 结尾的字符串中

java - 如何解决IllegalArgumentException : Property is not indexed

c - Memcpy 拷贝比预期多

C中的字符读取

c - 'designate an object'在C中是什么意思?

这个 memcpy 会导致未定义的行为吗?

c - 函数 ptr 分配类型转换

c - memcpy 函数有些奇怪

从共享内存段复制数据会导致客户端出现段错误(信号量和共享内存)