首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >结构复制效率

结构复制效率
EN

Stack Overflow用户
提问于 2016-03-04 07:40:34
回答 2查看 98关注 0票数 1

在C中的两个结构变量之间进行复制时,在后端是复制memcpy还是逐项复制?这能被编译器依赖吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-03-04 08:01:12

它严重依赖于编译器

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

代码语言:javascript
复制
struct A { int a, b; };

在调试版本中在VS2015中复制此结构将生成以下asm。

代码语言:javascript
复制
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个字符组成的数组,然后复制

代码语言:javascript
复制
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。

它取决于结构的布局,编译器,优化的水平,很多因素。

票数 4
EN

Stack Overflow用户

发布于 2016-03-04 08:30:22

你甚至不应该去想这个。编译器只需要它们生成的可观察到的结果与您所要求的相同。此外,他们可以优化他们喜欢的方式。这意味着您应该让编译器选择其复制结构的方式。

上述规则不适用于低级别优化的唯一情况。但在这方面适用其他规则:

  • 不要在早期开发阶段使用低级别优化。
  • 只有通过分析代码中的瓶颈才能进行识别。
  • 始终使用基准测试来选择最佳方式。
  • 请记住,这种低级别优化只对一个体系结构上的一个编译器(版本)有意义。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35790563

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档