A上,只要此位址A除以N且可以被整除的話,就代表此資料是對齊的(aligned):反之就是不對齊的(misaligned),以計算機結構裡的圖可以讓人簡單明瞭 (註:從白算盤到計算機結構主要都是以MIPS架構作為主題,書中的word代表32位元,但是在x86/x64架構下word則是代表16位元):
![]() |
| Fig.1 Aligned and misaligned address. |
struct AlignedStruct{
uint8_t uint8Var1;
uint64_t uint64Var2;
uint8_t uint8Var3;
uint16_t uint16Var4;
uint8_t uint8Var5;
uint32_t uint32Var6;
uint64_t uint64Var7;
uint32_t uint32Var8;
};
uint64_t getAlignedAddress(uint64_t currentElementAddr,uint16_t currentElementSize,uint16_t nextElementSize){
uint64_t address = currentElementAddr + currentElementSize;
for(;;){
if((address%nextElementSize) == 0)
break;
else
address ++;
}
return address;
}


沒有留言:
張貼留言