GCC常用知識

2021-08-19 21:31:29 字數 878 閱讀 1330

–threadsanitizer檢查data race

data race是指多個執行緒在沒有正確加鎖的情況下,同時訪問同一塊資料,並且至少有乙個執行緒是寫操作,對資料的讀取和修改產生了競爭,從而導致各種不可預計的問題。

–記憶體預取

__builtin_prefetch

通過gcc指令讓系統預取一部分主存內容到cpu cache中

–記憶體屏障

gcc指令設定記憶體屏障以保證函式內**的執行順序。如果沒有記憶體屏障,如果其他執行緒依賴了當前執行緒的某個函式內的邏輯**順序,整體邏輯就有可能因為當前執行緒的**被編譯器優化打亂順序導致出錯(雖然這種設計是乙個不亮的設計)。

–分支**

__builtin_expect

gcc指令likely、unlikely來優化**內的判斷

#define likely(x)       __builtin_expect(!!(x), 1)

#define unlikely(x) __builtin_expect(!!(x), 0)

–檔案的查詢目錄(cpp,c的話自己按照名字分析)

-> 編譯期

標頭檔案:-i、/usr/include;/usr/local/include、環境變數cpath;c_include_path;cplus_include_path;objc_include_path

動態庫檔案:-l、/lib;/usr/lib;/usr/local/lib、環境變數library_path

->執行期

動態庫:gcc rpath編譯期的預指定、/lib;/usr/lib、環境變數ld_library_path、ld_preload、/etc/ld.so.conf.d ldconfig

gcc常用引數

gcc的一些重要引數 1.i 指定標頭檔案搜尋路徑 i 表include 如 gcc c hello.c o hello.o i usr include 2.l 指定要連線的庫所在的目錄 l 指定要連線的庫的名字 如 gcc main.o l usr lib lqt o hello 3.d 定義巨集...

gcc常用引數

今晚看了些有關gcc的編譯選項的內容,記錄下來以備查用。1 gcc c 只編譯不鏈結,生成.o檔案。例如,gcc c hello.c,將由hello.c得到hello.o 2 gcc o直接得到可執行檔案,並且可以指定可執行檔的名稱。例如,gcc o hello hello.c,將由hello.c得...

gcc常用引數

o file 指定輸出檔名,在編譯為目標 時,這一選項不是必須的。如果file沒有指定,預設檔名是a.out.c 只編譯不鏈結 dfoo bar 在命令列定義預處理巨集foo,其值為bar idirname 將dirname加入到頭檔案的搜尋目錄列表中 ldirname 將dirname加入到庫檔案...