1. 預設情況下char為1位元組對齊,short為2自己對齊,int為4位元組對齊
__packet為1位元組對齊,struct預設為最長型別對齊
所以當進行指標強轉時,如從char *p = ***; int *p1= p; 此時p1得到的結果可能是有問題的,因為p1需要4自己對齊!!!
所以大家做指標強制轉換時,一定要特別的小心!
2. struct a __packet
上面這個結構體,訪問struct a a; 使用a->c的位址時,不進行指標強轉,也不是對齊的,所以也可能造成問題!!!
所以操作__packet結構體,只能使用value的操作方法,或者使用__packet指標,或者使用 char(uint8_t)指標!!!
3. 結構體指標呢?
char val[2];
struct xx *p = &val[1];
這是p得到的位址正確嗎?
//以上為arm/mips系統的限制,x86下無這個限制!!!
2016.6.13
OpenCV原始碼之記憶體分配 指標對齊
原文 首先,為什麼要指標對齊 pointer alignment 指標對齊有時候非常重要,因為許多硬體相關的東西在對齊上存在限制。在有些系統中,某種資料型別只能儲存在偶數邊界的位址處。例如,在經典的 sparc架構 以及經典的arm 上,你不能從奇數字址讀取乙個超過1位元組的整型資料。嘗試這麼做將會...
位元組對齊問題總結
便於cpu快速訪問,減少cpu訪存的次數。對於不同硬體平台下 的移植尤為重要。位元組對齊的目標是 讓變數的起始位址符合某種 特性 比如在32位系統中int變數佔4個位元組,分配記憶體時,其起始位址應該位於4位元組的邊界上,即起始位址能夠被4整除。編譯器缺省會自動為變數對齊,在x86平台上,gcc缺省...
shell配置問題總結 針對zsh
1.拷貝 移動 刪除提示 alias cp cp i alias mv mv i alias rm rm i 2.動態庫載入路徑 export ld library path ld library path 3.無法支援萬用字元,如ls 某個路徑下的 原因來自網路 shell 不會按照遠端位址上的檔...