gpt4 book ai didi

在 c 中创建自己的 malloc 函数

转载 作者:太空宇宙 更新时间:2023-11-03 23:46:00 25 4
gpt4 key购买 nike

我已经创建了自己的 malloc 函数并且它可以正常工作。但我想创建另一个 malloc,仅使用数组而不使用 struct。是否可以在没有 struct 的情况下创建?这是我的代码。

#include <stdio.h>
char memory[20000];
int freeMem=20000;

typedef struct{
int start;
int end;
}chunk;

void *MyMalloc(int size){
printf("\nMemory Size= %d ",size);

if(size==0){
printf("0 means no memory\n");
return 0;
}

int memsize=20000;
chunk *p=(chunk *)&memory[0];
if(freeMem >= size+sizeof(chunk)){
while(p<(chunk *)&memory[19999]){
if(p->start==0){
if(p->end !=0){
if(size+sizeof(chunk)< (p->end - (int)p)){
p->start=(int)p+8;
p->end=(int)p+8+size;
freeMem = freeMem-(size+8);
printf("free Mem : %d\n",freeMem);
return (int *)p->start;
}
else{
p=(chunk *)p->end;
continue;
}
}
else{
p->start=(int)p+8;
p->end=(int)p+8+size;
freeMem = freeMem-(size+8);
printf("free Mem : %d\n",freeMem);
return (int *)p->start;
}
}

p = (chunk *)p->end;
}
}
else{
printf("no space...!\n");
return 0;
}
}
void MyFree(void * p){
chunk *ptr = (chunk *)p;
ptr--;
freeMem=freeMem+(ptr->end - ptr->start)+sizeof(chunk);
if(ptr->start != 0){
printf("\nfreed Memory : %d\t",ptr->end - ptr->start);

ptr->start = 0;
}
else{
printf("\nno Such memory allocated!!!!!\n");
}

}

最佳答案

粗略地说,使用的基 native 制是相同的。在MyMalloc中,多分配2*sizeof(int)空间,存放一个chunk的内容,返回后面的地址2*sizeof(int)。在释放时,反向执行相同的过程 - 从参数中减去 2*sizeof(int) 以访问之前存储在 chunk 中的内容。

关于在 c 中创建自己的 malloc 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33543520/

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