3 回答

TA貢獻1798條經(jīng)驗 獲得超3個贊
還有哪些其他操作系統(tǒng)(或C / C ++運行時,如果您是操作系統(tǒng))將整數(shù)div-by-零報告為浮點異常?
答案取決于您是在內(nèi)核空間還是用戶空間。如果您在內(nèi)核空間中,則可以將“ i / 0”放在中kernel_main(),讓中斷處理程序調(diào)用異常處理程序并暫停內(nèi)核。如果您在用戶空間中,答案取決于您的操作系統(tǒng)和編譯器設(shè)置。
AMD64硬件將整數(shù)除以零指定為中斷0,這與中斷16(x87浮點異常)和中斷19(SIMD浮點異常)不同。
“被零除”例外是用div指令除以零。關(guān)于x87 FPU的討論不在此問題范圍內(nèi)。
其他硬件具有類似的不同中斷(例如,PPC在float-div-by-zero上引發(fā)0x7000,并且根本不捕獲int / 0)。
更具體地說,00700映射到異常類型“程序”,其中包括啟用了浮點的異常。如果嘗試使用浮點指令將其除零,則會引發(fā)此類異常。
另一方面,按照PPC PEM,整數(shù)除法是未定義的行為:
8-53潛水
如果嘗試執(zhí)行除法-0x8000_0000÷–1或÷0,則rD的內(nèi)容以及CR0字段的LT,GT和EQ位的內(nèi)容均未定義(如果Rc = 1,則未定義) )。在這種情況下,如果OE = 1,則設(shè)置OV。
我們的應(yīng)用程序使用_controlfp_s內(nèi)在函數(shù)(最終為stmxcsr op)對除零的浮點異常進行屏蔽,然后捕獲它們以進行調(diào)試。因此,我在實踐中肯定看到過IEEE754除以零例外。
我認(rèn)為您的時間最好花在編譯時而不是運行時被零除。
- 3 回答
- 0 關(guān)注
- 822 瀏覽
添加回答
舉報