D REENTRANT編譯選項的作用

2021-07-24 18:20:02 字數 612 閱讀 1477

-d_reentrant巨集作用

_reentrant巨集

在乙個多執行緒程式裡,預設情況下,只有乙個errno變數供所有的

執行緒共享。假設在乙個執行緒準備獲取剛才的錯誤**時,該變數很容易被另

外乙個執行緒中的函式呼叫所改變。類似的問題還存在於fputs之類的函式中

,這些函式通常用乙個單獨的全域性性區域來快取輸出資料。

為了解決這個問題,需要使用可重入的程式。可重入**可以被多

次呼叫而仍然工作正常。編寫的多執行緒程式,通過定義巨集_reentrant來告訴

編譯器我們需要可重入功能,這個巨集的定義必須出現於程式中的任何

#include語句之前。

_reentrant為我們做了三件事情,並且做得非常優雅:

1)對部分函式重新定義它們的可安全重入的版本,這些函式名字

一般不會發生改變,只是會在函式名後面新增_r字串,如函式名

gethostbyname變成gethostbyname_r。

2)stdio.h中原來以巨集的形式實現的一些函式將變成可安全重入函 數。

3)在error.h中定義的變數errno現在將成為乙個函式呼叫,它能

夠以一種安全的多執行緒方式來獲取真正的errno的值。

VC編譯選項

vc編譯選項 od 禁用優化 預設值 disable optimizations default ox 最大化選項。ogityb2 gs maximum opts.ogityb1 gs og 啟用全域性優化 enable global optimization oy 啟用框架指標省略 enable ...

PHP編譯選項

編譯擴充套件庫 usr local php bin phpize configure with php config usr local php bin php config make make install ln s ext sockets modules sockets.so sockets....

GCC編譯選項

gcc g 在執行編譯工作的時候,總共需要4步 1.預處理,生成.i的檔案 預處理器cpp 2.將預處理後的檔案不轉換成組合語言,生成檔案.s 編譯器egcs 3.有彙編變為目標 機器 生成.o的檔案 彙編器as 4.連線目標 生成可執行程式 鏈結器ld 引數詳解 c 只啟用預處理,編譯,和彙編,也...