简介:我正在查看汇编代码来指导我的优化,并将int32添加到指针时看到大量符号或零扩展。 void Test(int *out, int offset) { out[offset] = 1; } ————————————- movslq %esi, %rsi movl $1, (%rdi,%rsi,4) ret 起初,我认为我的编译器在添加32位到64位整数时遇到了挑战,但是我已经用Intel ICC 11,ICC 14和GCC 5.3证实了这种行为。 这个线程证实了我的发现,但是不清楚符号或零扩展是否必要。 只有在高32位还没有设置的情况下,这个符号/零扩展才是必要的。 但是,x86-64 ABI不会足够聪明,需要吗? 我有点不情愿改变我所有的指针偏移ssize_t,因为注册溢出会增加代码的caching足迹。