在瀏覽通過一些內核代碼,我發現對於存儲器對準的公式作爲公式存儲器alignement
對準=((操作數+(取向 - 1))&〜(取向 - 1))
所以後來我甚至寫一個程序是:
#include <stdio.h>
int main(int argc, char** argv) {
long long operand;
long long alignment;
if(argv[1]) {
operand = atol(argv[1]);
} else {
printf("Enter value to be aligned!\n");
return -1;
}
if(argv[2]) {
alignment = strtol(argv[2],NULL,16);
} else {
printf("\nDefaulting to 1MB alignment\n");
alignment = 0x100000;
}
long long aligned = ((operand + (alignment - 1)) & ~(alignment - 1));
printf("Aligned memory is: 0x%.8llx [Hex] <--> %lld\n",aligned,aligned);
return 0;
}
但我沒有得到這個邏輯可言。這個怎麼用 ?
用*二進制*表示將它寫出紙面。未對齊值和對齊值。在紙上*逐個執行操作*以查看錶達式每個部分的結果,並將它們拼湊在一起。當然,所有的二進制值都完成了。 –
只是爲了精確,必須澄清的是,對齊邊界**必須是2 **的冪。 –