最近由於在忙咱們數據倉庫的開源工做,要是一個C++系統開源,工做量實在是大,提及來都是淚(累)。以及生活中的一些事,找房子什麼的,學習東西的時間比較少,這個系列很長時間沒有更新,爭取年前搞完,廢話少說,直接介紹知識點。緩存
gcc -O1 -S code.c函數
objdump -d code.o學習
objdump -d code指針
Intel用「字」表示16位數據類型,32位數爲「雙字」,64位數爲「四字」code
兩個操做數不能都指向存儲器位置blog
如:jmp .L1ip
.L1:get
popl %edxit
這就就是直接跳轉cli
jmp *%eax
用寄存器%eax中的值做爲跳轉的目標。條件跳轉只能是直接跳轉
Switch經過跳轉表來實現,跳轉表的優勢是執行開關語句的時間與開關狀況的數量無關。跳轉表更加高效。If經過條件跳轉實現。
結構值是除以數據類型大小後的值
隨機化、棧保護和限制那部分存儲器存儲可執行代碼
1)指針和長整數是64位長
2)通用目的寄存器從8個擴展到16個
3)許多程序狀態都保存在寄存器中,而不是在棧上。整形和指針過程參數(最多6個)經過寄存器傳遞。
4)對棧位置的引用至關於棧指針。大多數函數在調用開始時分配所須要的整個棧存儲,在過程開始時經過減少棧指針,並在調用過程當中保持棧指針指向固定位置。