我和一位同事正在讨论某些方法的效率,以便将零归零struct
。假设我们有一个简单的struct
像这样:
struct {
int iMyInt;
char cMyChar;
double dCoordinates[128];
} s_t;
我的方法是这样做:
s_t myStruct = { 0 };
我的同事建议这种方法:
s_t myStruct = { };
他指出,我的方法是在一个分为两部分的操作中初始化单个元素,然后初始化其余元素,而他的方法struct
则是在更快,更高效的单部分操作中初始化整个元素。
这是真的吗?如果是这样,在所有编译器优化级别上都是如此(即:编译器是否会解决这个问题并无论如何为我对其进行优化)?
谢谢你。
首先,您发布的代码无效:您应按以下方式声明该结构类型
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, %rdi
movl %eax, %esi
callq memset
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句