我需要简化自制malloc
。内存池只是一个无符号字符数组。我正在计划一个包含内存块大小的结构,一个标志(分配'A',免费'F')和指向下一个标题的指针(虽然我猜这不是''这是必要的,因为你已经有了块的长度)
Anywho,我不知道如何轻松地将结构存储在内存池中。这是我目前的代码:
#include <stdlib.h>
#include <stdio.h>
#include "ex1.h"
#define POOL_SIZE 500
unsigned char mem_pool[POOL_SIZE];
unsigned char *ptr = &mem_pool[0];
typedef struct header Header;
Header h;
struct header{
int size;
char flag;
Header * next;
};
void ma_init(){
h = (Header){ .size = POOL_SIZE - sizeof(Header), .flag = 'F', .next = NULL};
}
现在,h
标题不在mem_pool中。逻辑上,在初始化时它应该是mem_pool[0] = (Header){ ...
,因为这是mem_pool的第一个字段。当然我可以将指针放在数组中,但这会破坏具有mem_pool的aspec。
那么我应该如何在数组的某个位置存储结构(或其他)?
答案 0 :(得分:2)
你的内存池只是一块已分配的内存,你可以随心所欲地处理和解释内存的任何部分,你只需要小心记账。
因此,您可以声明内存池的第一个字节是头结构的第一个字节:
struct header *h = (struct header *)mem_pool;
h->flag = 'F';
// this will be set after you allocate the first block
// you would set it to h + sizeof(struct header) + allocation size
h->next = NULL;
因此,只要您拥有blob的开头并且您的尺寸/指针是正确的,您就可以继续将适当的内存块投射为struct
。