我分配的內存:內存配置查詢
int *p = (int *) malloc(sizeof(int));
然後我typcase它:
char *new = (char *)p;
我釋放它:
free(new);
1)有多少內存將被釋放的性格有1個字節的空間? 2)內存管理器應該怎樣的內部機制(在嵌入式系統中)跟蹤分配的內存和釋放內存? (沒有布爾允許)
我分配的內存:內存配置查詢
int *p = (int *) malloc(sizeof(int));
然後我typcase它:
char *new = (char *)p;
我釋放它:
free(new);
1)有多少內存將被釋放的性格有1個字節的空間? 2)內存管理器應該怎樣的內部機制(在嵌入式系統中)跟蹤分配的內存和釋放內存? (沒有布爾允許)
當您致電malloc
(或其中一個兄弟姐妹)時,內存大小將分配它存儲爲「關於此分配的信息」(info_block
)的一部分。 malloc
不知道你是否在sizeof(int)
過去了,不斷4
或sizeof(short)*2
或任何其他你可能已經給了它[其實,很可能擴大分配,比方說,16個字節 - 這大小存儲作爲配置的一部分。
當您稍後致電free
時,它將「找回」info_block
,然後它知道要釋放的大小。因此,只要指針內部的值是相同的值,那麼對指針執行的操作或其他操作無關緊要。
我想避免的樣子起伏,就像我寫一個新的內存管理,也沒有不想要查找/布爾/尺寸存儲 – user2071394 2013-02-20 11:45:14
「查找」,在我看過的所有分配器,是爲「減去的sizeof一樣簡單(信息)從我們得到的指針「,所以它不是一個漫長的操作。然後一些分配器嘗試將前一個/下一個可用內存塊與當前的內存塊合併,但並非總是如此。如果碎片化是一個問題,那麼使用一組固定大小的「桶」是避免這種情況的好方法。 – 2013-02-20 12:08:25
我您的具體情況,答案取決於基礎構建築。假設一個32位的機器,指針的大小總是4個字節。如果你使用它可以得到麻煩,即
int *p = (int *) malloc(sizeof(char));
但你會得到一個警告,我相信。
所以你的情況這是成爲分配的4個字節。
另外,你不應該投malloc的虛空*:
int *p = malloc(sizeof(int));
是完全沒有問題。
'的malloc()'和'免費()'處理'無效*,並沒有關於類型的想法 - 他們只是對付你問大小的內存塊。 – 2013-02-20 10:44:04