ブロックにメモリを割り当て、リンクされたさまざまな構造にメモリポインタを割り当てることができる関数を作成しようとしています。
#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 を使用して各構造体にメモリを割り当てると、多くのオーバーヘッドが発生します。これは、ツリーが数百万のノードで構成されているため、非常に大きな問題です。