令人驚訝的兩個方案給了兩個指針相同,即使數據類型不同的區別.....的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