2017-04-07 03:37:34 +08:00
|
|
|
#ifndef _KALLOC_H_
|
|
|
|
|
#define _KALLOC_H_
|
|
|
|
|
|
2017-09-19 07:49:15 +08:00
|
|
|
#include <stddef.h> /* for size_t */
|
2017-04-07 03:37:34 +08:00
|
|
|
|
|
|
|
|
#ifdef __cplusplus
|
|
|
|
|
extern "C" {
|
|
|
|
|
#endif
|
|
|
|
|
|
2017-09-19 07:49:15 +08:00
|
|
|
typedef struct {
|
2017-12-12 01:11:10 +08:00
|
|
|
size_t capacity, available, n_blocks, n_cores, largest;
|
2017-09-19 07:49:15 +08:00
|
|
|
} km_stat_t;
|
|
|
|
|
|
2017-04-07 03:37:34 +08:00
|
|
|
void *kmalloc(void *km, size_t size);
|
|
|
|
|
void *krealloc(void *km, void *ptr, size_t size);
|
|
|
|
|
void *kcalloc(void *km, size_t count, size_t size);
|
|
|
|
|
void kfree(void *km, void *ptr);
|
|
|
|
|
|
|
|
|
|
void *km_init(void);
|
2019-07-18 21:13:30 +08:00
|
|
|
void *km_init2(void *km_par, size_t min_core_size);
|
2017-04-07 03:37:34 +08:00
|
|
|
void km_destroy(void *km);
|
2017-09-19 07:49:15 +08:00
|
|
|
void km_stat(const void *_km, km_stat_t *s);
|
2017-04-07 03:37:34 +08:00
|
|
|
|
|
|
|
|
#ifdef __cplusplus
|
|
|
|
|
}
|
|
|
|
|
#endif
|
|
|
|
|
|
2019-07-18 21:13:30 +08:00
|
|
|
#define KMALLOC(km, ptr, len) ((ptr) = (__typeof__(ptr))kmalloc((km), (len) * sizeof(*(ptr))))
|
|
|
|
|
#define KCALLOC(km, ptr, len) ((ptr) = (__typeof__(ptr))kcalloc((km), (len), sizeof(*(ptr))))
|
|
|
|
|
#define KREALLOC(km, ptr, len) ((ptr) = (__typeof__(ptr))krealloc((km), (ptr), (len) * sizeof(*(ptr))))
|
|
|
|
|
|
|
|
|
|
#define KEXPAND(km, a, m) do { \
|
|
|
|
|
(m) = (m) >= 4? (m) + ((m)>>1) : 16; \
|
|
|
|
|
KREALLOC((km), (a), (m)); \
|
|
|
|
|
} while (0)
|
|
|
|
|
|
2017-04-07 03:37:34 +08:00
|
|
|
#endif
|