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 | f107910 | 2003-10-23 06:13:16 +0000 | [diff] [blame] | 9 | /* |
Igor Sysoev | a8fa0a6 | 2003-11-25 20:44:56 +0000 | [diff] [blame^] | 10 | * NGX_MAX_ALLOC_FROM_POOL should be (NGX_PAGE_SIZE - 1), i.e. 4095 on x86. |
Igor Sysoev | f107910 | 2003-10-23 06:13:16 +0000 | [diff] [blame] | 11 | * On FreeBSD 5.x it allows to use zero copy send. |
Igor Sysoev | a8fa0a6 | 2003-11-25 20:44:56 +0000 | [diff] [blame^] | 12 | * On Windows NT it decreases a number of locked pages in a kernel. |
Igor Sysoev | b1ab5d0 | 2003-04-21 14:55:47 +0000 | [diff] [blame] | 13 | */ |
| 14 | #define NGX_MAX_ALLOC_FROM_POOL 4095 |
Igor Sysoev | 6de5c2c | 2002-08-06 16:39:45 +0000 | [diff] [blame] | 15 | |
Igor Sysoev | 6de5c2c | 2002-08-06 16:39:45 +0000 | [diff] [blame] | 16 | #define NGX_DEFAULT_POOL_SIZE (16 * 1024) |
| 17 | |
Igor Sysoev | 4e9393a | 2003-01-09 05:36:00 +0000 | [diff] [blame] | 18 | #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] | 19 | |
| 20 | |
| 21 | typedef struct ngx_pool_large_s ngx_pool_large_t; |
Igor Sysoev | 1c10462 | 2003-06-03 15:42:58 +0000 | [diff] [blame] | 22 | |
Igor Sysoev | 6de5c2c | 2002-08-06 16:39:45 +0000 | [diff] [blame] | 23 | struct ngx_pool_large_s { |
| 24 | ngx_pool_large_t *next; |
| 25 | void *alloc; |
| 26 | }; |
| 27 | |
Igor Sysoev | 1c10462 | 2003-06-03 15:42:58 +0000 | [diff] [blame] | 28 | |
| 29 | typedef struct ngx_pool_s ngx_pool_t; |
| 30 | |
Igor Sysoev | 6de5c2c | 2002-08-06 16:39:45 +0000 | [diff] [blame] | 31 | struct ngx_pool_s { |
| 32 | char *last; |
| 33 | char *end; |
| 34 | ngx_pool_t *next; |
| 35 | ngx_pool_large_t *large; |
| 36 | ngx_log_t *log; |
| 37 | }; |
| 38 | |
| 39 | |
| 40 | void *ngx_alloc(size_t size, ngx_log_t *log); |
| 41 | void *ngx_calloc(size_t size, ngx_log_t *log); |
| 42 | |
| 43 | ngx_pool_t *ngx_create_pool(size_t size, ngx_log_t *log); |
| 44 | void ngx_destroy_pool(ngx_pool_t *pool); |
| 45 | |
| 46 | void *ngx_palloc(ngx_pool_t *pool, size_t size); |
| 47 | void *ngx_pcalloc(ngx_pool_t *pool, size_t size); |
Igor Sysoev | f107910 | 2003-10-23 06:13:16 +0000 | [diff] [blame] | 48 | void ngx_pfree(ngx_pool_t *pool, void *p); |
| 49 | |
Igor Sysoev | 6de5c2c | 2002-08-06 16:39:45 +0000 | [diff] [blame] | 50 | |
Igor Sysoev | a983011 | 2003-05-19 16:39:14 +0000 | [diff] [blame] | 51 | #define ngx_free free |
| 52 | |
Igor Sysoev | 6de5c2c | 2002-08-06 16:39:45 +0000 | [diff] [blame] | 53 | |
| 54 | #endif /* _NGX_ALLOC_H_INCLUDED_ */ |