Ant*_*lov 8 c++ optimization struct
编译以下代码时
#include <cstring>
struct X { char a, b, c, d; };
void copy_assignment(char* p, X x) {
*p++ = x.a;
*p++ = x.b;
*p++ = x.c;
*p++ = x.d;
}
void copy_memcpy(char* p, X x) {
memcpy(p, &x, sizeof(X));
}
Run Code Online (Sandbox Code Playgroud)
GCC和clang都发出一系列movb指令copy_assignment
,同时发出一条movl指令copy_memcpy
.假设X
没有填充,它不在这里,不应该两个是等效的,并且不是单个movl更有效?
确切地说,我正在编译:
g++ -O3 -S -o prog.S prog.cpp
Run Code Online (Sandbox Code Playgroud)
为了铿锵而战.GCC版本为7.1.1,Clang版本为4.0.1.使用-O2,-Os和-Ofast会得到相同的结果.