【发布时间】:2014-06-23 05:48:29
【问题描述】:
令人惊讶的是,即使数据类型不同,两个程序都给出了相同的两个指针之间的差异.....
malloc 究竟是如何存储它的元数据的,这正是我试图通过这个小实验来发现的......
程序 1:
int main ()
{
char *i,*j;
i=(char*)malloc (sizeof(char));
j=(char*)malloc (sizeof(char));
printf ("%x\n",i);
printf ("%x\n",j);
return 0;
}
输出:
710010
710030
程序 2:
int main ()
{
int *i,*j;
i=(int*)malloc (sizeof(int));
j=(int*)malloc (sizeof(int));
printf ("%x\n",i);
printf ("%x\n",j);
return 0;
}
输出:
16b8010
16b8030
在这个节目之前我的想法:
| meta data of i | memory space of i | meta data of j | memory space of j |
但结果不支持理论....
【问题讨论】:
-
函数 malloc() 与双向链表以及一些其他开销一起使用。因此,连续的 malloc 调用将不会在彼此之间的预期偏移处返回地址。此外, char 在函数调用中被提升为 int 。此外,malloc() 的大多数实现都使用最小大小的倍数的内存来减少必要的数学计算量。此外,许多 malloc() 实现使用预分配的内存池。结果是几乎所有 malloc() 调用实际上获得的内存比预期的要多。