aral.h 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. #ifndef ARAL_H
  2. #define ARAL_H 1
  3. #include "../libnetdata.h"
  4. #define ARAL_MAX_NAME 23
  5. typedef struct aral ARAL;
  6. struct aral_statistics {
  7. struct {
  8. size_t allocations;
  9. size_t allocated_bytes;
  10. } structures;
  11. struct {
  12. size_t allocations;
  13. size_t allocated_bytes;
  14. size_t used_bytes;
  15. } malloc;
  16. struct {
  17. size_t allocations;
  18. size_t allocated_bytes;
  19. size_t used_bytes;
  20. } mmap;
  21. };
  22. ARAL *aral_create(const char *name, size_t element_size, size_t initial_page_elements, size_t max_page_size,
  23. struct aral_statistics *stats, const char *filename, char **cache_dir, bool mmap, bool lockless);
  24. size_t aral_element_size(ARAL *ar);
  25. size_t aral_overhead(ARAL *ar);
  26. size_t aral_structures(ARAL *ar);
  27. struct aral_statistics *aral_statistics(ARAL *ar);
  28. size_t aral_structures_from_stats(struct aral_statistics *stats);
  29. size_t aral_overhead_from_stats(struct aral_statistics *stats);
  30. ARAL *aral_by_size_acquire(size_t size);
  31. void aral_by_size_release(ARAL *ar);
  32. size_t aral_by_size_structures(void);
  33. size_t aral_by_size_overhead(void);
  34. struct aral_statistics *aral_by_size_statistics(void);
  35. int aral_unittest(size_t elements);
  36. #ifdef NETDATA_TRACE_ALLOCATIONS
  37. #define aral_mallocz(ar) aral_mallocz_internal(ar, __FILE__, __FUNCTION__, __LINE__)
  38. #define aral_freez(ar, ptr) aral_freez_internal(ar, ptr, __FILE__, __FUNCTION__, __LINE__)
  39. #define aral_destroy(ar) aral_destroy_internal(ar, __FILE__, __FUNCTION__, __LINE__)
  40. void *aral_mallocz_internal(ARAL *ar, const char *file, const char *function, size_t line);
  41. void aral_freez_internal(ARAL *ar, void *ptr, const char *file, const char *function, size_t line);
  42. void aral_destroy_internal(ARAL *ar, const char *file, const char *function, size_t line);
  43. #else // NETDATA_TRACE_ALLOCATIONS
  44. #define aral_mallocz(ar) aral_mallocz_internal(ar)
  45. #define aral_freez(ar, ptr) aral_freez_internal(ar, ptr)
  46. #define aral_destroy(ar) aral_destroy_internal(ar)
  47. void *aral_mallocz_internal(ARAL *ar);
  48. void aral_freez_internal(ARAL *ar, void *ptr);
  49. void aral_destroy_internal(ARAL *ar);
  50. #endif // NETDATA_TRACE_ALLOCATIONS
  51. #endif // ARAL_H