windows終止處理程序( __try __finally) 簡單解析

通過使用終止處理程序可以防止過早的執行return語句。當return語句試圖退出try塊的時候,編譯器會讓finally代碼在它。即編譯器保證finally代碼塊在出try塊的時候return之前執行。

者可以想知道,編譯器是如何保證此功能的呢?原來當編譯器檢查程序代碼時,會發現try代碼裏有一個return語句。於是,編譯器就會生成一些代碼先將返回值(例子中的 3)保存在一個由它創建的一個臨時變量裏,然後再執行finally語句塊。這個過程被稱之前爲局部展開(LOCAL UNWIND)。更確切的說,當系統因try代碼提前退出finally時就會發生局部展開。一旦finally代碼塊執行完畢,編譯器所創建的臨時變量值就會返回給函數調用者。

 

由此可見,爲了讓整個機制運行起來,編譯器必鬚生成一些額外的代碼,而系統也要很執行一些額外的工作。在不同的cpu結構上,讓終止處理工作起來的步驟也不同。需要注意的是,應該避免在try代碼中使用return語句,因爲這是對程序性能有害的。__leave關鍵字,它可以幫助我們發現那些有局部展開開銷的代碼

更多內容推薦原文查看:

https://blog.csdn.net/weixin_34221773/article/details/89755155

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章