Samodelkin
а ?
пример кода библиотеки который позволяет переопределить аллокацию на хипе, плюс я в юзерской части кода показал как делать топорный аллокатор с статическим массивом
// ------------- lib
typedef void*(*mylib_mem_alloc)(size_t size);
typedef void(*mylib_mem_free)(void * ptr);
static mylib_mem_alloc mem_alloc;
static mylib_mem_free mem_free;
void mylib_setOverride(mylib_mem_alloc setA, mylib_mem_free setF)
{
mem_alloc = setA;
mem_free = setF;
}
struct mylib_context
{
int a, b, c;
};
mylib_context * mylib_init()
{
return (mylib_context*)(*mem_alloc)(sizeof(mylib_context));
}
void mylib_free(mylib_context * ctx)
{
(*mem_free)(ctx);
}
// ------------- user code
static char mbuf[4096];
static size_t mpos = 0;
void * usr_alloc(size_t size)
{
size_t mpos_old = mpos;
mpos += size;
return mbuf + mpos_old;
}
void usr_free(void * ptr)
{
}
int main()
{
printf("mbuf ptr %p\n", mbuf);
mylib_setOverride(usr_alloc, usr_free);
mylib_context * ctx = mylib_init();
printf("ctx ptr %p\n", (void*)ctx);
mylib_free(ctx);
return 0;
}
на выходе получаем два одинаковых поинтера в консоли, что означает что наш супер аллокатор памяти работает
ps. методы классов не находятся в куче, они находятся в скомпилированном коде, в куче разве что может находится vtable с указателями на методы для классов с виртуальными методами