c中的release和debug版本的區別

Debug通常稱爲調試版本,它包含調試信息,並且不作任何優化,便於程序員調試程序。Release稱爲發佈版本,它往往是進行了各種優化,使得程序在代碼大小和運行速度上都是最優的,以便用戶很好地使用。

Debug 和 Release 的真正祕密,在於一組編譯選項。下面列出了分別針對二者的選項(當然除此之外還有其他一些,如/Fd /Fo,但區別並不重要,通常他們也不會引起 Release 版錯誤,在此不討論)

Debug 版本


參數 含義 
/MDd /MLd 或 /MTd 使用 Debug runtime library (調試版本的運行時刻函數庫) 
/Od 關閉優化開關 
/D "_DEBUG" 相當於 #define _DEBUG,打開編譯調試代碼開關 (主要針對assert函數) 
/ZI 創建 Edit and continue(編輯繼續)數據庫,這樣在調試過程中如果修改了源代碼不需重新編譯 
/GZ 可以幫助捕獲內存錯誤 
/Gm 打開最小化重鏈接開關, 減少鏈接時間

 

Release 版本


參數 含義 
/MD /ML 或 /MT 使用發佈版本的運行時刻函數庫 
/O1 或 /O2 優化開關,使程序最小或最快 
/D "NDEBUG" 關閉條件編譯調試代碼開關 (即不編譯assert函數) 
/GF 合併重複的字符串, 並將字符串常量放到只讀內存, 防止被修改

 

實際上,Debug 和 Release 並沒有本質的界限,他們只是一組編譯選項的集合,編譯器只是按照預定的選項行動。事實上,我們甚至可以修改這些選項,從而得到優化過的調試版本或是帶跟蹤語句的發佈版本。

哪些情況下 Release 版會出錯

有了上面的介紹,我們再來逐個對照這些選項看看 Release 版錯誤是怎樣產生的

1、Runtime Library:鏈接哪種運行時刻函數庫通常只對程序的性能產生影響。調試版本的 Runtime Library 包含了調試信息,並採用

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