ngx_palloc.h 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. /*
  2. * Copyright (C) Igor Sysoev
  3. * Copyright (C) Nginx, Inc.
  4. */
  5. #ifndef _NGX_PALLOC_H_INCLUDED_
  6. #define _NGX_PALLOC_H_INCLUDED_
  7. #ifdef __cplusplus
  8. extern "C" {
  9. #endif
  10. #ifdef _WIN32
  11. #define ngx_pagesize cs_os_pagesize()
  12. #else
  13. #define ngx_pagesize getpagesize()
  14. #endif
  15. /*
  16. * NGX_MAX_ALLOC_FROM_POOL should be (ngx_pagesize - 1), i.e. 4095 on x86.
  17. * On Windows NT it decreases a number of locked pages in a kernel.
  18. */
  19. #define NGX_MAX_ALLOC_FROM_POOL (ngx_pagesize - 1)
  20. #define NGX_DEFAULT_POOL_SIZE (16 * 1024)
  21. #define NGX_POOL_ALIGNMENT 16
  22. typedef struct ngx_pool_s ngx_pool_t;
  23. typedef struct ngx_pool_large_s ngx_pool_large_t;
  24. #define NGX_MIN_POOL_SIZE \
  25. cs_align((sizeof(ngx_pool_t) + 2 * sizeof(ngx_pool_large_t)), \
  26. NGX_POOL_ALIGNMENT)
  27. struct ngx_pool_large_s {
  28. ngx_pool_large_t *next;
  29. void *alloc;
  30. };
  31. typedef struct {
  32. u_char *last;
  33. u_char *end;
  34. ngx_pool_t *next;
  35. cs_uint_t failed;
  36. } ngx_pool_data_t;
  37. struct ngx_pool_s {
  38. ngx_pool_data_t d;
  39. size_t max;
  40. ngx_pool_t *current;
  41. ngx_pool_large_t *large;
  42. };
  43. void *ngx_alloc(size_t size);
  44. void *ngx_calloc(size_t size);
  45. CS_API ngx_pool_t *ngx_create_pool(size_t size);
  46. CS_API void ngx_destroy_pool(ngx_pool_t *pool);
  47. CS_API void ngx_reset_pool(ngx_pool_t *pool);
  48. CS_API void *ngx_palloc(ngx_pool_t *pool, size_t size);
  49. CS_API void *ngx_pnalloc(ngx_pool_t *pool, size_t size);
  50. CS_API void *ngx_pcalloc(ngx_pool_t *pool, size_t size);
  51. CS_API void *ngx_pmemalign(ngx_pool_t *pool, size_t size, size_t alignment);
  52. CS_API cs_int_t ngx_pfree(ngx_pool_t *pool, void *p);
  53. #ifdef __cplusplus
  54. }
  55. #endif /* C++ support */
  56. #endif /* _NGX_PALLOC_H_INCLUDED_ */