gpt4 book ai didi

c++ - 为大节点树动态分配内存

转载 作者:行者123 更新时间:2023-11-28 07:36:47 26 4
gpt4 key购买 nike

我正在尝试创建一个函数,以 block 为单位分配内存,然后能够为链接在一起的不同结构分配内存指针。

#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();
}

memptrmemstartextern char*memstart 是 block 的开始,memptr 是你所在的位置。InitMem 在启动时在 main 中运行。

全局变量.h

extern char *memstart;
extern char *memptr;

全局.cpp

char *memstart;
char *memptr;

例如 结构节点* TheNode = GetSpace(sizeof(struct Node));

但是代码运行得非常糟糕,并且在程序中出现了很多故障。

有什么通用的方法吗?当我使用 malloc 为每个结构分配内存时,会有很多开销,这是一个巨大的问题,因为树由数百万个节点组成。

最佳答案

这段代码有问题

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

因为它没有按大小推进 memptr。

关于c++ - 为大节点树动态分配内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16635624/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com