Выделите память для огромного дерева узлов динамически

Я пытаюсь сделать функцию, которая выделяет память в блоках, а затем в состоянии назначить указатель памяти для различных структур, связанных друг с другом.

#define MEMSIZE 50*1024*1024*sizeof(char)
#include "globals.h"void *AddBlock(void){
memstart = (char*) calloc(1,MEMSIZE);
if(memstart==NULL){
printf("Hittade inte minne...:\n");
getchar();
throw 1;
}
memptr = memstart;
return memstart;
}

void* GetSpace(size_t size){ //gör nytt block eller putta fram pekaren
//makes a new block or increases ptr

void *tmp = NULL;//where the data should be stored
if(( memptr+size+1 >= memstart+MEMSIZE) )
tmp = AddBlock();
else
{
tmp = memptr;
memptr+=size;
}
return tmp;
}

void InitMem(void){ //init of memory globals
AddBlock();
}

memptr а также memstart являются extern char*, memstart это начало блока и memptr это то, где вы находитесь
InitMem находится в main по началу.

глобальные .h

extern char *memstart;
extern char *memptr;

глобальные .cpp

char *memstart;
char *memptr;

Например.
struct Node * TheNode = GetSpace (sizeof (struct Node));

Но код работает очень плохо и дает много глюков в программе.

Есть ли какой-нибудь общий способ сделать это? Когда я выделяю память для каждой структуры с помощью malloc, возникает много накладных расходов, и это огромная проблема, поскольку дерево состоит из миллионов узлов.

0

Решение

Эта часть кода имеет проблему

if(( memptr+size+1 >= memstart+MEMSIZE) )
tmp = AddBlock();

потому что это не продвигает memptr по размеру.

1

Другие решения

Других решений пока нет …