mem0dbg.h
上传用户:romrleung
上传日期:2022-05-23
资源大小:18897k
文件大小:4k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. /******************************************************
  2. The memory management: the debug code. This is not a compilation module,
  3. but is included in mem0mem.* !
  4. (c) 1994, 1995 Innobase Oy
  5. Created 6/9/1994 Heikki Tuuri
  6. *******************************************************/
  7. /* In the debug version each allocated field is surrounded with
  8. check fields whose sizes are given below */
  9. #ifdef UNIV_MEM_DEBUG
  10. #define MEM_FIELD_HEADER_SIZE   ut_calc_align(2 * sizeof(ulint),
  11. UNIV_MEM_ALIGNMENT)
  12. #define MEM_FIELD_TRAILER_SIZE  sizeof(ulint)
  13. #else
  14. #define MEM_FIELD_HEADER_SIZE   0
  15. #endif
  16. /* Space needed when allocating for a user a field of
  17. length N. The space is allocated only in multiples of
  18. UNIV_MEM_ALIGNMENT. In the debug version there are also
  19. check fields at the both ends of the field. */
  20. #ifdef UNIV_MEM_DEBUG
  21. #define MEM_SPACE_NEEDED(N) ut_calc_align((N) + MEM_FIELD_HEADER_SIZE
  22.                       + MEM_FIELD_TRAILER_SIZE,
  23.           UNIV_MEM_ALIGNMENT)
  24. #else
  25. #define MEM_SPACE_NEEDED(N) ut_calc_align((N), UNIV_MEM_ALIGNMENT)
  26. #endif
  27. /*******************************************************************
  28. Checks a memory heap for consistency and prints the contents if requested.
  29. Outputs the sum of sizes of buffers given to the user (only in
  30. the debug version), the physical size of the heap and the number of
  31. blocks in the heap. In case of error returns 0 as sizes and number
  32. of blocks. */
  33. void
  34. mem_heap_validate_or_print(
  35. /*=======================*/
  36. mem_heap_t*    heap,  /* in: memory heap */
  37. byte* top, /* in: calculate and validate only until
  38. this top pointer in the heap is reached,
  39. if this pointer is NULL, ignored */
  40. ibool            print,  /* in: if TRUE, prints the contents
  41. of the heap; works only in
  42. the debug version */
  43. ibool*           error,  /* out: TRUE if error */
  44. ulint*          us_size,/* out: allocated memory 
  45. (for the user) in the heap,
  46. if a NULL pointer is passed as this
  47. argument, it is ignored; in the
  48. non-debug version this is always -1 */
  49. ulint*          ph_size,/* out: physical size of the heap,
  50. if a NULL pointer is passed as this
  51. argument, it is ignored */
  52. ulint*          n_blocks); /* out: number of blocks in the heap,
  53. if a NULL pointer is passed as this
  54. argument, it is ignored */
  55. #ifdef UNIV_MEM_DEBUG
  56. /******************************************************************
  57. Prints the contents of a memory heap. */
  58. void
  59. mem_heap_print(
  60. /*===========*/
  61. mem_heap_t*   heap); /* in: memory heap */
  62. #endif /* UNIV_MEM_DEBUG */
  63. /******************************************************************
  64. Checks that an object is a memory heap (or a block of it) */
  65. ibool
  66. mem_heap_check(
  67. /*===========*/
  68. /* out: TRUE if ok */
  69. mem_heap_t*   heap); /* in: memory heap */
  70. /******************************************************************
  71. Validates the contents of a memory heap. */
  72. ibool
  73. mem_heap_validate(
  74. /*==============*/
  75. /* out: TRUE if ok */
  76. mem_heap_t*   heap); /* in: memory heap */
  77. #ifdef UNIV_MEM_DEBUG
  78. /*********************************************************************
  79. TRUE if no memory is currently allocated. */
  80. ibool
  81. mem_all_freed(void);
  82. /*===============*/
  83. /* out: TRUE if no heaps exist */
  84. /*********************************************************************
  85. Validates the dynamic memory */
  86. ibool
  87. mem_validate_no_assert(void);
  88. /*=========================*/
  89. /* out: TRUE if error */
  90. /****************************************************************
  91. Validates the dynamic memory */
  92. ibool
  93. mem_validate(void);
  94. /*===============*/
  95. /* out: TRUE if ok */
  96. #endif /* UNIV_MEM_DEBUG */
  97. /****************************************************************
  98. Tries to find neigboring memory allocation blocks and dumps to stderr
  99. the neighborhood of a given pointer. */
  100. void
  101. mem_analyze_corruption(
  102. /*===================*/
  103. byte* ptr); /* in: pointer to place of possible corruption */
  104. /*********************************************************************
  105. Prints information of dynamic memory usage and currently allocated memory
  106. heaps or buffers. Can only be used in the debug version. */
  107. void
  108. mem_print_info(void);
  109. /*================*/
  110. /*********************************************************************
  111. Prints information of dynamic memory usage and currently allocated memory
  112. heaps or buffers since the last ..._print_info or..._print_new_info. */
  113. void
  114. mem_print_new_info(void);
  115. /*====================*/