Nginx對記憶體管理有自己的一套機制,具體Nginx原始碼中在ngx_palloc.c中,主要是分為是對大塊記憶體和小記憶體分配,大體結構圖如下:

小記憶體是從pool記憶體池中分配的;大記憶體則是呼叫malloc()函式申請到記憶體后直接掛載到pool結構的large鏈表的data上去,
在nginx記憶體分配的代碼中,ngx_align_ptr()函式是用來對指標的設定,具體設定是:將指標按照設定的位元組對齊回傳對齊設定后的指標,
其實也很簡單,通過代碼案例來理解比較清楚的理解,代碼運行環境為Linux 64位作業系統,具體代碼如下:
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <inttypes.h>
#define ngx_align_ptr(p, a) \
(u_char *) (((uintptr_t) (p) + ((uintptr_t) a - 1)) & ~((uintptr_t) a - 1))
int main(int argc, char *argv[])
{
void *p = (void *)malloc(100);
printf("sizeof(uintptr_t):%x, p:%x, p+7:%x\n", sizeof(uintptr_t), p, p + 7);
char *m = ngx_align_ptr(p + 7, 32);
printf("m:%x\n", m);
return 0;
}
執行結果如下:

其實就是讓指標的地址偏移至設定至的一個整數倍,
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/348333.html
標籤:其他
