Joh*_*itb 9 c++ optimization x86 gcc micro-optimization
我的同事和我自己都没有成功解释为什么GCC,ICC和Clang没有优化这个功能
void f(std::uint64_t a, void * p) {
std::uint8_t *x = reinterpret_cast<std::uint8_t *>(p);
x[7] = a >> 56;
x[6] = a >> 48;
x[5] = a >> 40;
x[4] = a >> 32;
x[3] = a >> 24;
x[2] = a >> 16;
x[1] = a >> 8;
x[0] = a;
}
Run Code Online (Sandbox Code Playgroud)
进入这个
mov QWORD PTR [rsi], rdi
Run Code Online (Sandbox Code Playgroud)
如果我们f用memcpy它来表达,就会发出它mov.如果我们做一些看似微不足道的字节写入序列,为什么不会发生?
我不是专家,但是gcc只能在gcc 7中为立即常量合并相邻的商店:
如果我不得不猜测,通过第二个错误,等待可能不会太久.