微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

C – 初始化结构的有效方法

我和一位同事正在讨论某些方法来降低结构的效率.假设我们有一个简单的结构,如下所示:

struct {
  int     iMyInt;
  char    cMyChar;
  double  dCoordinates[128];
} s_t;

我的方法是这样做:

s_t myStruct = { 0 };

我的同事改为建议这种做法:

s_t myStruct = { };

他指出我的方法在两部分操作中初始化单个元素,然后初始化其余元素,而他的方法一个部分操作中初始化整个结构,这个操作更快,更有效.

这是真的,如果是这样的话,所有编译器优化级别的情况总是如此(即:编译器是否会解决这个问题并为我优化它)?

谢谢.

解决方法

首先,您发布的代码无效:您应该声明该结构类型如下

struct s_t {
  int     iMyInt;
  char    cMyChar;
  double  dCoordinates[128];
};

这就是说:在你的具体情况下,两种方法是相同的,一切都是零.对于使用任何上述成员和/或数组元素的通用测试代码,在-O3和偶数-O0处没有区别(在-O0,它甚至在两种情况下都调用整个结构上的memset).

s_t obj = {0};

movq    %rcx,%rdi
movl    %eax,%esi
callq   memset

s_t obj = {};

movq    %rcx,%esi
callq   memset

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐