C在数组中写struct

时间:2014-03-01 00:11:27

标签: c arrays pointers struct

我需要简化自制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。

那么我应该如何在数组的某个位置存储结构(或其他)?

1 个答案:

答案 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