1
在sys/signal.h
中,SIGFPE
的可能代碼之一是FPE_FLTSUB
,其評論只是說「下標超出範圍-NOTIMP」。我在OS X 10.9上,但似乎在glibc as well。什麼是「FPE_FLTSUB:下標超出範圍」信號?
它不是標準的IEEE例外之一,那它是什麼,什麼時候提出的?
在sys/signal.h
中,SIGFPE
的可能代碼之一是FPE_FLTSUB
,其評論只是說「下標超出範圍-NOTIMP」。我在OS X 10.9上,但似乎在glibc as well。什麼是「FPE_FLTSUB:下標超出範圍」信號?
它不是標準的IEEE例外之一,那它是什麼,什麼時候提出的?
當x86 BOUND
指令檢測到數組索引超出範圍時,FreeBSD會生成此代碼,其格式爲SIGFPE
。它看起來像Linux生成SIGSEGV
。
這不是特別重要,因爲最好避免使用BOUND
指令。它在64位模式下不可用,在大多數現代處理器中,即使索引處於邊界內,它也非常慢。
它用於訪問數組邊界之外。 – Barmar 2014-11-20 23:16:54
@Barmar你有任何更多的信息或鏈接?我認爲C數組並沒有被檢查:它是否總是在出界信號上發出信號? – 2014-11-21 09:15:24
它們不需要進行邊界檢查。但這並不意味着他們不可能。如果一個實現檢查邊界,他們可以使用這個信號來報告它。另外,C並不是世界上唯一的語言,其他語言也會進行邊界檢查。 – Barmar 2014-11-21 15:56:08