在拆解我的程序时,我注意到了;
while (!block->meta.lock);
将编译成;
0x0040167f <+111>: jmp 0x40167f <gc_malloc+111>
显然这是一个无用的无限循环。我正在使用C99,所以我不能让它变得不稳定。
我目前的解决方案:
while (!block->meta.lock) {
__sync_synchronize();
}
这会产生很多的额外装配。我真正想要生成的是等同于rep nop
锁;
见What does "rep; nop;" mean in x86 assembly?
我如何向gcc暗示这一点?