記憶體分配位址的對齊

2021-06-08 06:38:41 字數 495 閱讀 7631

void * 

memalign

(size_t boundary, size_t size) 

看nginx源**中的實現

#define ngx_align(d, a)     (((d) + (a - 1)) & ~(a - 1))

返回的位址值為d後第乙個是a的整數倍的值。

a是2的整數次冪。假設a = 2^n,即a的二進位制表示中末尾有n個0。

假設返回的結果為a。則a-d的值在[0,a)之間,且a/a = 整數。

以二進位制的形式可以比較清楚地看出其中的道理:

1)如果d正好是a的整數倍,則d的二進位制表示中末尾n位全是0,加上a-1之後,只改變了末尾的n位,對d中的高位沒有任何影響;在與(&)上a-1的取反,末尾的n位全成了0。對d的值沒有任何改變。

2)如果d不是a的整數倍,則d加上a-1之後在n+1位會加1,剩餘的n位在與a-1的取反按位與(&)之後全為0。此時的d值正好是a的整數倍,且與原來的d值之差不超過a。

動態分配記憶體返回位址對齊的指標

int mallocedmemory int malloc 1024 15 alignedmemory int int mallocedmemory 15 15 void alignedmemory 1 mallocedmemory return alignedmemory 15 而不是 16的原因...

變數的記憶體分配 記憶體對齊

資料結構還有變數等等都需要占有記憶體,在很多系統中,它都要求記憶體分配的時候要對齊,這樣做的好處就是可以提高訪問記憶體的速度。include iostream 2using namespace std 34 structx15 1011struct x212 17 18struct x319 24 ...

變數的記憶體分配 記憶體對齊

資料結構還有變數等等都需要占有記憶體,在很多系統中,它都要求記憶體分配的時候要對齊,這樣做的好處就是可以提高訪問記憶體的速度。include iostream 2using namespace std 34 structx15 1011struct x212 17 18struct x319 24 ...