Igor Sysoev | 6de5c2c | 2002-08-06 16:39:45 +0000 | [diff] [blame] | 1 | #ifndef _NGX_ALLOC_H_INCLUDED_ |
| 2 | #define _NGX_ALLOC_H_INCLUDED_ |
| 3 | |
| 4 | |
| 5 | #include <ngx_config.h> |
Igor Sysoev | 1c10462 | 2003-06-03 15:42:58 +0000 | [diff] [blame^] | 6 | #include <ngx_core.h> |
Igor Sysoev | 6de5c2c | 2002-08-06 16:39:45 +0000 | [diff] [blame] | 7 | |
Igor Sysoev | 6de5c2c | 2002-08-06 16:39:45 +0000 | [diff] [blame] | 8 | |
Igor Sysoev | b1ab5d0 | 2003-04-21 14:55:47 +0000 | [diff] [blame] | 9 | /* 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 Sysoev | 6de5c2c | 2002-08-06 16:39:45 +0000 | [diff] [blame] | 14 | |
Igor Sysoev | 6de5c2c | 2002-08-06 16:39:45 +0000 | [diff] [blame] | 15 | #define NGX_DEFAULT_POOL_SIZE (16 * 1024) |
| 16 | |
Igor Sysoev | 4e9393a | 2003-01-09 05:36:00 +0000 | [diff] [blame] | 17 | #define ngx_test_null(p, alloc, rc) if ((p = alloc) == NULL) { return rc; } |
Igor Sysoev | 6de5c2c | 2002-08-06 16:39:45 +0000 | [diff] [blame] | 18 | |
| 19 | |
| 20 | typedef struct ngx_pool_large_s ngx_pool_large_t; |
Igor Sysoev | 1c10462 | 2003-06-03 15:42:58 +0000 | [diff] [blame^] | 21 | |
Igor Sysoev | 6de5c2c | 2002-08-06 16:39:45 +0000 | [diff] [blame] | 22 | struct ngx_pool_large_s { |
| 23 | ngx_pool_large_t *next; |
| 24 | void *alloc; |
| 25 | }; |
| 26 | |
Igor Sysoev | 1c10462 | 2003-06-03 15:42:58 +0000 | [diff] [blame^] | 27 | |
| 28 | typedef struct ngx_pool_s ngx_pool_t; |
| 29 | |
Igor Sysoev | 6de5c2c | 2002-08-06 16:39:45 +0000 | [diff] [blame] | 30 | struct 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 | |
| 39 | void *ngx_alloc(size_t size, ngx_log_t *log); |
| 40 | void *ngx_calloc(size_t size, ngx_log_t *log); |
| 41 | |
| 42 | ngx_pool_t *ngx_create_pool(size_t size, ngx_log_t *log); |
| 43 | void ngx_destroy_pool(ngx_pool_t *pool); |
| 44 | |
| 45 | void *ngx_palloc(ngx_pool_t *pool, size_t size); |
| 46 | void *ngx_pcalloc(ngx_pool_t *pool, size_t size); |
| 47 | |
Igor Sysoev | a983011 | 2003-05-19 16:39:14 +0000 | [diff] [blame] | 48 | #define ngx_free free |
| 49 | |
Igor Sysoev | 6de5c2c | 2002-08-06 16:39:45 +0000 | [diff] [blame] | 50 | |
| 51 | #endif /* _NGX_ALLOC_H_INCLUDED_ */ |