Пятница, 18 Апрель 2008
nginx programming guide: работа с памятью
Что бы закончить про «память» в nginx надо затронуть тему выделения памяти из pool’а.
Общие сведения
Память можно выделять двумя способами. Первый и наиболее удобный это из pool’а используя pool запроса или конфига. Но если надо, можно выделить память напрямую, у os.
Ручная работа с памятью
Для ручного выделения памяти существует функция:
void *ngx_alloc(size_t size, ngx_log_t *log);
На самом деле это просто обертка над malloc’ом которая записывает в лог в случае проблем, да и пишет debug log.
Если память нужна обнуленная, то следует использовать:
void *ngx_calloc(size_t size, ngx_log_t *log);
Для освобождения памяти используется ngx_free, который сейчас (nginx 0.6.29) представляет из себя макрос:
#define ngx_free free
Если нужен memalign(), то для него существует обертка (которая скрывает за собой memalign/posix_memalign или malloc для freebsd):
#if (NGX_HAVE_POSIX_MEMALIGN || NGX_HAVE_MEMALIGN)
void *ngx_memalign(size_t alignment, size_t size, ngx_log_t *log);
#else
#define ngx_memalign(alignment, size, log) ngx_alloc(size, log)
#endif
Работа с памятью через pool’ы
Ручная работа с памятью, хоть и возможна, но не всегда удобна. Лучше брать память из pool’ов.
Если просто нужна память, то использовать стоит:
void *ngx_palloc(ngx_pool_t *pool, size_t size);
Если память после выделения надо обнулить то:
void *ngx_pcalloc(ngx_pool_t *pool, size_t size);
После работы с памятью, освобождать ее не надо, она освободиться после уничтожения pool’а.
Комментарии
Форма комментирования для «nginx programming guide: работа с памятью»