valloc.c 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include <string.h>
  4. static int count = 0;
  5. static int use = 0;
  6. void *v_malloc(size_t size)
  7. {
  8. void *p;
  9. p = malloc(size ? size + sizeof(int) : 0);
  10. if (!p)
  11. return NULL;
  12. count++;
  13. *(int *)p = size;
  14. use += size;
  15. return (void *)((char *)p + sizeof(int));
  16. }
  17. void *v_calloc(size_t num, size_t size)
  18. {
  19. void *p;
  20. p = v_malloc(num * size);
  21. if (!p)
  22. return NULL;
  23. memset(p, 0, num * size);
  24. return p;
  25. }
  26. void v_free(void *block)
  27. {
  28. void *p;
  29. if (!block)
  30. return;
  31. p = (void *)((char *)block - sizeof(int));
  32. use -= *(int *)p;
  33. count--;
  34. free(p);
  35. }
  36. void *v_realloc(void *block, size_t size)
  37. {
  38. void *p;
  39. int s = 0;
  40. if (block)
  41. {
  42. block = (void *)((char *)block - sizeof(int));
  43. s = *(int *)block;
  44. }
  45. p = realloc(block, size ? size + sizeof(int) : 0);
  46. if (!p)
  47. return NULL;
  48. if (!block)
  49. count++;
  50. *(int *)p = size;
  51. use += (size - s);
  52. return (void *)((char *)p + sizeof(int));
  53. }
  54. int v_mcheck(int *_count, int *_use)
  55. {
  56. if (_count)
  57. *_count = count;
  58. if (_use)
  59. *_use = use;
  60. // if (count || use)
  61. // {
  62. // printf("|||----------->>> area = %d, size = %d\r\n", count, use);
  63. // return 1;
  64. // }
  65. return 0;
  66. }
  67. void displayMem()
  68. {
  69. int area = 0, use = 0;
  70. v_mcheck(&area, &use);
  71. printf("|||----------->>> area = %d, size = %d\r\n", area, use);
  72. }