除了最後一個溝渠「發生了什麼事情」之外,是否有很多處理SIGSEGV的生產用途?對SIGSEGV的生產性使用
從SIGSEGV wiki page,調試器使用它來捕捉用戶程序中的錯誤,並通知用戶發生了什麼。我看到它的方式,它是查詢虛擬內存系統的一種方式,而且由於我們有一個虛擬內存系統,所以我覺得SIGSEGV可以以更高效的方式使用。我想到的一件事是,你可以在某處放置一個堆棧,嘗試將其放入它,然後當你捕獲一個SIGSEGV時,增加堆棧的大小,然後重試該操作。例如,如果您正在處理郵件,但不知道郵件的大小,但由於速度的原因,您希望將它們寫入內存,我覺得這樣做可能很有用。
這是信號的合法使用嗎?有沒有其他方法可以將它作爲控制流程和執行的一種方法併入您的軟件設計中,而不是作爲錯誤處理的最後一種方法?
在你的例子中,你可能已經知道堆棧大小和堆棧指針的當前位置,所以你會提前知道給定的操作是否會溢出堆棧。 – 2012-03-14 17:12:48
@OliCharlesworth:我可能弄錯了,但我不認爲他的例子假設知道堆棧大小。事實上,我認爲這種方法已經被某些操作系統用於堆棧。 – 2012-03-14 17:22:45
segfault的有效性在於它允許操作系統終止一個程序,該程序的內部狀態如此受損以至於處理器無法有效地繼續執行代碼。將狀態腐敗轉化爲程序功能並不富有成效。 – 2012-03-14 17:25:06