C語言中free函數是如何確定要釋放多少內存空間的


本文鏈接:http://www.cnblogs.com/xxNote/p/4009359.html

今天看書的時候看到free函數釋放動態申請的內存時只需要把內存塊的首地址傳過去就行了,顯然僅僅依靠首地址是無法確定要釋放多少內存的,猜想應該在某處存放着這個內存塊的大小,網上搜了搜發現在Linux里面glibc在分配內存的時候會在內存塊的地址前面的4個字節出存放內存塊的大小,就猜想Windows里面應該也是這樣。寫了一個小程序測試了下:

#include <stdio.h>
#include <STDLIB.H>

int main(void)
{
	int *p = (int *) malloc(10 * sizeof(int));
	*p = 1;
	free(p);

	return 0;
}

運行調試,先找到這個內存塊的地址:

現在看一下內存:

由於申請了40個字節大小的內存塊,轉換成16進制就是0x00000028,在內存中就是28 00 00 00 ,看一下上圖可以發現內存塊首地址之前的16個字節處和猜想中的結果一樣,接下來申請一個400字節大小的內存塊,轉換成16進制就是0x00000190,在內存中就是90 01 00 00,再看一下運行的結果:

依然和推測出的結果一樣,可見Windows里面當我們使用free函數釋放內存的時候,函數會把內存塊的首地址加上16,從這個位置就可以找到內存塊的大小。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM