简单内存分配算法相关内存布局
nfcac 2008-12-18 10:31:39 近日读到一段内存分配算法,但对算法内数据结构的内存布局没有搞明白.
程序如下:
onst int SEG_LEN = 128-4;
struct Mem_seg
{
char mem [SEG_LEN];
Mem_seg * next;
};
struct Mem_list
{
Mem_list(Mem_seg *h, Mem_seg *e)
:head(h),end(e)
{
}
Mem_seg * head;
Mem_seg * end;
};
Mem_list mem_init(char * all_mem, int free_size)
{
int seg_num = free_size / SEG_LEN;
for(int i=0;i<seg_num;++i)
((Mem_seg *)&all_mem[i * SEG_LEN])->next=(Mem_seg *)&all_mem[(i+1)*SEG_LEN];
return Mem_list((Mem_seg *)all_mem,(Mem_seg *)&all_mem[seg_num * SEG_LEN]);
}
...
void test_list(Mem_list test_list)
{
std::ofstream outfile;
outfile.open("test.txt", std::ios::app);
Mem_seg * phead = test_list.head;
Mem_seg * pend = test_list.end;
for(int i=0; phead != pend;phead=phead->next,i++)
outfile<<"head"<<":"<<phead<<",\t"
<<i<<":"<<&(phead->mem)<<",\t"
<<i<<":"<<&(phead->next)<<",\t"
<<i<<":"<<phead->next<<",\t"
<< "sizeof" << ":" << sizeof(*phead) << ",\t";
outfile<<std::endl;
outfile.close();
}
int main()
{
long mem_len = 384;
//long mem_len = 1024*8;
char *all_mem= new char[mem_len];
Mem_list free_list=mem_init(all_mem,mem_len);
test_list(free_list);
结果如下
head:0x8b1120, 0:0x8b1120, 0:0x8b119c, 0:0x8b119c, sizeof:128,
head:0x8b119c, 1:0x8b119c, 1:0x8b1218, 1:0x8b1218, sizeof:128,
head:0x8b1218, 2:0x8b1218, 2:0x8b1294, 2:0x8b1294, sizeof:128,
我的问题是内存里到底如何布局的,一段char数组,是不是包含了next指针(按照结构内存对其,理论上应该char[124]紧邻一个指针),还是没有包含,如果包含了那0-124是char,124-128是指针吗,但是为什么指针的指和指针的地址一样呢,如果一样岂不是下一个struct开头是上一个struct的next指针。如果没有包含那指针放到哪里去了,而且为什么指针地址貌似还在数组中