wsalloc.h
上传用户:gzpyjq
上传日期:2013-01-31
资源大小:1852k
文件大小:5k
源码类别:

手机WAP编程

开发平台:

WINDOWS

  1. /*
  2.  *
  3.  * wsalloc.h
  4.  *
  5.  * Author: Markku Rossi <mtr@iki.fi>
  6.  *
  7.  * Copyright (c) 1999-2000 WAPIT OY LTD.
  8.  *  All rights reserved.
  9.  *
  10.  * Memory allocation routines.
  11.  *
  12.  */
  13. #ifndef WSALLOC_H
  14. #define WSALLOC_H
  15. #if WS_DEBUG
  16. #define WS_MEM_DEBUG 1
  17. #endif /* WS_DEBUG */
  18. #if !WS_MEM_DEBUG
  19. /********************* Prototypes for global functions ******************/
  20. /* Allocate `size' bytes of memory.  The function returns NULL if the
  21.  * allocation fails. */
  22. void *ws_malloc(size_t size);
  23. /* Allocate `num' items of size `size'.  The returned memory block is
  24.  * initialied with zero.  The function returns NULL if the allocation
  25.  * fails .*/
  26. void *ws_calloc(size_t num, size_t size);
  27. /* Reallocate the memory block `ptr' to size `size'.  The old data is
  28.  * preserved in the new memory block.  The function returns NULL if
  29.  * the allocation fails.  It is permissible to call the function with
  30.  * NULL as the `ptr' argument of 0 as the `size' argument.  In these
  31.  * cases, the function acts the "Right Way".  If the `ptr' is NULL,
  32.  * the function allocates a fresh block of size `size'.  If the `size'
  33.  * is NULL, the memory block `ptr' is freed. */
  34. void *ws_realloc(void *ptr, size_t size);
  35. /* Take a copy of the memory buffer `ptr' which has `size' bytes of
  36.  * data.  The function returns NULL if the allocation fails.  The
  37.  * returned buffer is null-terminated. */
  38. void *ws_memdup(const void *ptr, size_t size);
  39. /* Take a copy of the C-string `str'.  The function returns NULL if
  40.  * the allocation fails. */
  41. void *ws_strdup(const char *str);
  42. /* Free the memory block `ptr' that was previously allocated with one
  43.  * of the ws_{m,c,re}alloc() functions.  It is allowed to call the
  44.  * function with NULL as the `ptr' argument. */
  45. void ws_free(void *ptr);
  46. #else /* WS_MEM_DEBUG */
  47. /********************* Memory debugging routines ************************/
  48. /* These macros and functions are used in debugging memory usage of
  49.  * the compiler and to find out memory leaks.  When these functions
  50.  * are used, each dynamically allocated block is recorded in a list of
  51.  * active blocks, and allocated blocks are tagged with information
  52.  * about their allocation location.  When the block is freed, it is
  53.  * removed from the list and its contents is marked freed.  Typically
  54.  * these functions detect memory leaks and freeing same memory block
  55.  * multiple times.
  56.  *  
  57.  * These functions can also be used to test error recovery code of
  58.  * memory allocation failures.  The function ws_clear_leaks() clears
  59.  * the current information about used blocks and it sets the limit of
  60.  * successful memory allocations.  When more than the limit number of
  61.  * memory allocations have been performed, all memory allocations
  62.  * fail.  When the tested function has returned, you can see if you
  63.  * cleanup code did not free all blocks by using the functions
  64.  * ws_hash_leaks() and ws_dump_blocks().
  65.  *  
  66.  * These functions are not thread safe.  They use shared static list
  67.  * to record the active blocks and they do not use any sorts of
  68.  * locking.
  69.  */
  70.     
  71. /* Macros to tag the allocation source file location to the allocated
  72. memory block. */
  73. #define ws_malloc(_s) ws_malloc_i((_s), __FILE__, __LINE__)
  74. #define ws_calloc(_n, _s) ws_calloc_i((_n), (_s), __FILE__, __LINE__)
  75. #define ws_realloc(_p, _s) ws_realloc_i((_p), (_s), __FILE__, __LINE__)
  76. #define ws_memdup(_p, _s) ws_memdup_i((_p), (_s), __FILE__, __LINE__)
  77. #define ws_strdup(_s) ws_strdup_i((_s), __FILE__, __LINE__)
  78. #define ws_free(_p) ws_free_i((_p))
  79. /* The allocation and freeing functions. */
  80. void *ws_malloc_i(size_t size, const char *file, int line);
  81. void *ws_calloc_i(size_t num, size_t size, const char *file, int line);
  82. void *ws_realloc_i(void *ptr, size_t size, const char *file, int line);
  83. void *ws_memdup_i(const void *ptr, size_t size, const char *file, int line);
  84. void *ws_strdup_i(const char *str, const char *file, int line);
  85. void ws_free_i(void *ptr);
  86. /* A predicate to check if the system currently has any allocated
  87.  * blocks.  The function returns 1 if it has any blocks and 0
  88.  * otherwise. */
  89. int ws_has_leaks(void);
  90. /* Dumps all currently allocated blocks, including their allocation
  91.  * location, to standard error (stderr).  The function also prints
  92.  * statistics about maximum memory usage. */
  93. void ws_dump_blocks(void);
  94. /* Clear all statistics and the list containing the currently
  95.  * allocated leaks.  The argument `num_successful_allocs' sets the
  96.  * limit how many memory allocations (assuming that the system has
  97.  * enought memory) are successful.  If more than
  98.  * `num_successful_allocs' are performed, the allocations routines
  99.  * will fail and return the value NULL. */
  100. void ws_clear_leaks(unsigned int num_successful_allocs);
  101. #endif /* WS_MEM_DEBUG */
  102. #endif /* not WSALLOC_H */