1、what is llvm(low level virtual machine):是模組化、可重用的編譯器及其工具鏈技術的集合。
2、編譯器架構:原始碼 ~ frontend ~ optimizer ~ backend ~ 可執行檔案
前端(clang):詞法分析(token)、語法分析(語法樹ast)、語義分析、生成中間**(ir)
優化器:中間**優化(pass)
後端:生成機器碼
3、待續
小細節:
(1)判斷資料型別:
常用的為三個模版方法:
isa《類》(變數指標) 返回布林型別,用於做執行時型別審查
cast《類》(變數指標)用於將基類轉換成派生類,如果不是正確的型別的話會觸發乙個assert。這個模版方法可以作用於指標和引用上
dyn_cast《類》(變數指標) 乙個包含了型別檢查的型別轉換模版方法。如果是正確的型別的話返回新型別的指標,否則返回null。這個模版方法只對指標生效,使用上非常類似c++的dynamic_cast<>
(2)遍歷全域性變數的宣告-使用鏈來找到所有引用了這個變數的指令並對loadinst和storeinst做正確的處理
宣告-使用鏈 即def-use chain,給定乙個變數,找到所有引用處
使用-宣告鏈 即use-def chain,給定乙個引用,找到所有可能的變數。
for(user *u : **ptr->users())else if(storeinst *si=dyn_cast(u))
}
基礎java了解
1.list arrylist 初始10 載入因子0.5 擴容0.5 1 vector 初始10 載入因子1 擴容1 set 初始16 載入因子0.75 擴容1 map 初始16 載入因子0.75 擴容1 2.hashtable 是加鎖的 在多執行緒 只有乙個可以訪問物件 所以就安全,hashmap...
陣列基礎了解
陣列的相關概念及用法 什麼是陣列 陣列的本質就是相同型別的某種事物的集合,例如乙個班裡有n個學生每個學生都有學號,而這個學號按照順序放在一起就是乙個陣列。陣列的建立 基本語法 a 資料型別 資料名稱 new 資料型別 b 資料型別 陣列名稱 示例 陣列的使用 示例 獲取某個下標的值並列印 陣列的遍歷...
git flow 基礎了解
git flow 軟體開發中的乙個分支管理流程。利用它可以讓軟體開發有條不紊的進行,先對它進行乙個大概的了解吧,後面工作了實際用到了在深入研究一下。先看下它的工作流程 這張圖看著一臉茫然,先放在這兒,後面就看懂了。開發中主要的兩個分支是master和develop分支。它們的職責 master分支 ...