C 中的異常:神話還是現實?
一般認為 C 的異常非常慢。然而,在 C 98 的上下文中這仍然成立嗎?
零成本模型
C 中目前使用的異常處理模型是零成本模型。該模型透過提供更有效的方法解決了 Andrei Alexandrescu 提出的問題。
零成本模型依照邊桌原理運作。編譯器不會設定防護和明確異常檢查,而是產生一個將潛在異常點對應到處理程序的表。這意味著在正常操作期間可以拋出異常而不會導致效能損失。
異常路徑成本
但是,當異常發生時,會產生效能成本。與傳統的「如果(錯誤)」策略相比,零成本模型可以慢 10-20 倍。此成本源自於邊表檢索期間的快取未命中以及用於處理程序確定的 RTTI 操作。
可讀性與效能
雖然異常可能會對表現產生輕微影響特殊路徑,它們在可讀性和易於錯誤處理方面的總體優勢應該是首要考慮因素。可讀的程式碼可以提高可維護性並降低錯誤的風險。
異常處理實踐
當呼叫者無法或不願意在本地處理錯誤時應使用異常。在這種情況下,異常允許錯誤在呼叫堆疊中向上傳播,從而使更高層級的處理程序能夠解決問題。
在某些情況下,明確錯誤檢查可能更可取。例如,map::find 不應該拋出異常,而應該傳回一個checked_ptr,如果其值為null,則在取消引用時觸發異常。這種方法使呼叫者能夠在明確檢查和異常處理之間進行選擇。
最終,異常和明確錯誤檢查之間的選擇應以設計考慮和程式碼的特定上下文為指導。
以上是C 98 中的 C 異常真的很慢:神話還是現實?的詳細內容。更多資訊請關注PHP中文網其他相關文章!