Показать сообщение отдельно
Старый 12.05.2012, 00:19   #53
jimon
 
Сообщений: n/a
Ответ: Russian Sound System

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 с указателями на методы для классов с виртуальными методами
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Samodelkin (12.05.2012)