blob: b63f4bdc18df848bf3f3a03e605e1772c1c46297 [file] [log] [blame]
Igor Sysoev6de5c2c2002-08-06 16:39:45 +00001#ifndef _NGX_ALLOC_H_INCLUDED_
2#define _NGX_ALLOC_H_INCLUDED_
3
4
5#include <ngx_config.h>
Igor Sysoev1c104622003-06-03 15:42:58 +00006#include <ngx_core.h>
Igor Sysoev6de5c2c2002-08-06 16:39:45 +00007
Igor Sysoev6de5c2c2002-08-06 16:39:45 +00008
Igor Sysoevb1ab5d02003-04-21 14:55:47 +00009/* NGX_MAX_ALLOC_FROM_POOL should be (PAGE_SIZE - 1), i.e. 4095 on x86.
10 On FreeBSD 5.x it allows to use zero copy send.
11 On Windows NT it decreases number of locked pages in kernel.
12 */
13#define NGX_MAX_ALLOC_FROM_POOL 4095
Igor Sysoev6de5c2c2002-08-06 16:39:45 +000014
Igor Sysoev6de5c2c2002-08-06 16:39:45 +000015#define NGX_DEFAULT_POOL_SIZE (16 * 1024)
16
Igor Sysoev4e9393a2003-01-09 05:36:00 +000017#define ngx_test_null(p, alloc, rc) if ((p = alloc) == NULL) { return rc; }
Igor Sysoev6de5c2c2002-08-06 16:39:45 +000018
19
20typedef struct ngx_pool_large_s ngx_pool_large_t;
Igor Sysoev1c104622003-06-03 15:42:58 +000021
Igor Sysoev6de5c2c2002-08-06 16:39:45 +000022struct ngx_pool_large_s {
23 ngx_pool_large_t *next;
24 void *alloc;
25};
26
Igor Sysoev1c104622003-06-03 15:42:58 +000027
28typedef struct ngx_pool_s ngx_pool_t;
29
Igor Sysoev6de5c2c2002-08-06 16:39:45 +000030struct ngx_pool_s {
31 char *last;
32 char *end;
33 ngx_pool_t *next;
34 ngx_pool_large_t *large;
35 ngx_log_t *log;
36};
37
38
39void *ngx_alloc(size_t size, ngx_log_t *log);
40void *ngx_calloc(size_t size, ngx_log_t *log);
41
42ngx_pool_t *ngx_create_pool(size_t size, ngx_log_t *log);
43void ngx_destroy_pool(ngx_pool_t *pool);
44
45void *ngx_palloc(ngx_pool_t *pool, size_t size);
46void *ngx_pcalloc(ngx_pool_t *pool, size_t size);
47
Igor Sysoeva9830112003-05-19 16:39:14 +000048#define ngx_free free
49
Igor Sysoev6de5c2c2002-08-06 16:39:45 +000050
51#endif /* _NGX_ALLOC_H_INCLUDED_ */