메모리를 블록 단위로 할당하고 함께 연결된 서로 다른 구조체에 메모리 포인터를 할당 할 수있는 함수를 만들려고합니다.거대한 노드 트리에 대한 메모리 할당을 동적으로 수행합니다.
#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;
전역는
char *memstart;
char *memptr;
을 .CPP 일예 struct Node * TheNode = GetSpace (sizeof (struct Node));
하지만 코드는 실제로 작동하지 않아 프로그램에 많은 결함이 있습니다.
이렇게하는 일반적인 방법이 있습니까? malloc을 사용하여 각 구조체에 메모리를 할당 할 때 많은 오버 헤드가 생길 수 있습니다. 트리가 수백만 개의 노드로 구성되어 있기 때문에 엄청난 양의 문제입니다. 이 크기 memptr 진행되지 않기 때문에
무엇이 질문입니까? 메모리 할당은 큰 주제이며 사용 사례도 정의하지 않았습니다. 우선, 개별 노드를 해제해야합니까? 다른 크기의 할당을 처리해야합니까? 일반적인 할당 크기는 얼마입니까? – delnan
예 크기는 다르지만 해제 할 필요는 없습니다. 일반적인 할당 크기는 약 16 - 88 size_t입니다. – user1821987
코드가 적당 해 보입니다. 당신이 처리하지 않는 유일한 방법은 정렬입니다. –