2014-11-20 18 views
1

sys/signal.h中,SIGFPE的可能代碼之一是FPE_FLTSUB,其評論只是說「下標超出範圍-NOTIMP」。我在OS X 10.9上,但似乎在glibc as well什麼是「FPE_FLTSUB:下標超出範圍」信號?

它不是標準的IEEE例外之一,那它是什麼,什麼時候提出的?

+0

它用於訪問數組邊界之外。 – Barmar 2014-11-20 23:16:54

+0

@Barmar你有任何更多的信息或鏈接?我認爲C數組並沒有被檢查:它是否總是在出界信號上發出信號? – 2014-11-21 09:15:24

+0

它們不需要進行邊界檢查。但這並不意味着他們不可能。如果一個實現檢查邊界,他們可以使用這個信號來報告它。另外,C並不是世界上唯一的語言,其他語言也會進行邊界檢查。 – Barmar 2014-11-21 15:56:08

回答

0

當x86 BOUND指令檢測到數組索引超出範圍時,FreeBSD會生成此代碼,其格式爲SIGFPE。它看起來像Linux生成SIGSEGV

這不是特別重要,因爲最好避免使用BOUND指令。它在64位模式下不可用,在大多數現代處理器中,即使索引處於邊界內,它也非常慢。