最近在調試問題時發現,在調用API讀寫一個地址時,發現只要訪問這個地址程序就會異常,使用trace32跟蹤發現,存放地址的X0寄存器的值的低32位是對的,就是咱們指望的地址,可是高32位所有爲1,對應的彙編指令是ldr w1, [x0],從而致使CPU訪問了一個不存在的地址。spa
通過分析發現,這個API的形參中存放地址的變量的數據類型是int,可是實際訪問地址用的倒是unsigned long類型,這樣就會涉及到有符號數轉換爲無符號數的轉換。若是有符號數的最高位爲1的話,在轉換爲無符號數時,會進行符號擴展,致使高32位所有變成了1,這樣就會變成一個很大的地址,因此存放地址的變量必需要用無符號類型。調試