【发布时间】:2014-03-01 00:11:27
【问题描述】:
我需要将自制的malloc 简化一点。内存池只是一个无符号字符数组。我打算有一个结构体,它是一个标头,包含内存块的大小、一个标志('A' 代表已分配,'F' 代表免费)和一个指向下一个标头的指针(尽管我猜这是' t 是必要的,因为你已经有了块的长度)
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 tof。
那么我应该如何将结构(或其他)存储在数组的某个位置?
【问题讨论】:
-
可能是分配记录的链接列表,位于池的开头还是池外?