Friday, 18 April 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’а.

Write on: 11:55 | 0 comments | | tags: , , , , , | permalink |
Add post to:   Delicious Reddit Slashdot Digg Technorati Google


Add comment

Comments

No comments for this post

Comment form for «nginx programming guide: работа с памятью»

Required. 30 chars of fewer.

Required.