令人惊讶的两个方案给了两个指针相同,即使数据类型不同的区别.....的malloc存储元数据
究竟是怎样的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
方案二:
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 |
但结果并不支持这个理论....
FYI:不要投'malloc'结果](http://stackoverflow.com/q/605845/119527)。 –
^无关评论 – PRP
函数malloc()与双向链接列表以及其他一些开销一起使用。因此,连续的malloc调用不会以相互之间的预期偏移返回地址。此外,char在函数调用中被提升为int。此外,malloc()的大多数实现都以最小大小的倍数来处理内存,以减少必要的数学计算量。而且,许多malloc()实现都可以使用预先分配的内存池。结果几乎所有的malloc()调用实际上都会获得比预期更多的内存。 – user3629249