【发布时间】:2016-08-22 03:30:18
【问题描述】:
您好,我对 c 比较陌生,想知道是否有人可以解释我正在使用以下代码做什么。
我有一个结构:
typedef struct free_list_header {
u_int32_t magic; // ought to contain MAGIC_FREE
vsize_t size; // # bytes in this block (including header)
vlink_t next; // memory[] index of next free block
vlink_t prev; // memory[] index of previous free block
} free_header_t;
我正在使用以下函数在函数中对其进行初始化...
void vlad_init(u_int32_t size)
{
int sizePow2 = pow(2, ceil(log(size)/log(2)));
memory = malloc(sizePow2*sizeof(char));
memory_size = sizePow2;
strategy = BEST_FIT;
free_header_t *freeHeader = (free_header_t*)memory;
freeHeader->magic = MAGIC_FREE; // the unique value
freeHeader->size = memory_size; // amount we malloc'd
freeHeader->next = 0; // position of next free block
freeHeader->prev = 0; // position of prev free block
free_list_ptr = 0;
}
我的问题是我到底在做什么,为什么有必要?
free_header_t *freeHeader = (free_header_t*)memory;
所以...我通过指向名为“freeHeader”的新结构来声明它?那是我分配的内存中指向它的指针吗?所以这是一种将结构放入 malloc 区域以从我初始化它的函数中访问它的方法?
【问题讨论】:
-
他的代码是您编写的,还是作为作业或教程的一部分提供给您的?因为感觉怪怪的。比如,为什么要使用 char 的大小而不是 struct 的大小来初始化内存?为什么不直接初始化
freeHeader,而不是先初始化memory,然后再进行赋值? -
嗯……您的术语不清楚,但这可能是问题的一部分。
sizePow2是什么?它最好至少和memory_size一样大,否则你(可能)会遇到问题。或者问题出在memory_size?或者两者兼而有之。 -
所以它是一个内存分配器,初始化函数接受一个数字并将 2 的最小幂分配给 malloc 至少那么多。 memory_size ==sizePow2,我将编辑并添加整个函数。
-
注释“# bytes in this block (including header)”表明内存分配应该覆盖结构的四个成员的内存,加上一些用于其他目的的空闲内存,所以分配结构的大小不会很好,在这里。空闲内存将是结构本身地址的一个恒定偏移量,因此可能的意图是以这种方式访问它。大概这是某种内存分配器的一部分,尽管它使用标准内存分配器来完成它的工作。
-
sizeof (char)定义为 1。