在gcc中打開1級優化後,我有一個奇怪的問題。我所做的是將標籤和jmp保存在一個不同的函數中。優化後標籤移動gcc中打開
void
UMS__suspend_procr(VirtProcr *animatingPr)
{
animatingPr->nextInstrPt = &&ResumePt;
[Some Code and inline volatile asm]
ResumePt:
return;
}
我做一些跳躍的,他們都做工精細。 問題是,當我打開O1時,它不保存正確的標籤地址。相反,它這樣做:
804b14e: 8b 45 08 mov 0x8(%ebp),%eax
804b151: c7 40 14 4e b1 04 08 movl $0x804b14e,0x14(%eax)
804b158: 8b 55 08 mov 0x8(%ebp),%edx
所以程序甚至在分配前跳回來。
您是否知道,獲取標籤的地址是非標準的語言擴展?因此完全不可移植。 – 2011-05-25 16:18:05