malloc函式的原理是什麼啊?

時間 2025-03-11 16:20:10

1樓:異鄉同客

給出windows平臺下的答案:

malloc函式最終會請求windows的堆管理器(heap manager)在程序的預設堆上分配記憶體。堆管理器通過快查連結串列(look-aside list)管理和分配記憶體,每條快查連結串列包含空閒的相同長度的記憶體。

你可能會問,那整數有無限多個,就要有無限多個快查連結串列了?當然不會,在32位windows作業系統上,每個堆有128條快查連結串列,控制的記憶體分配長度分別從8位元組到1k。如果你要分配1~8位元組,實際會分配8位元組,要分配1025位元組及其以上實際就分配1k...

不完全這樣,最後一段有補充)

當堆管理器接受到乙個7位元組的分配請求,先看看8位元組這條快查連結串列是否為空,如不為空,直接從中取出一項來滿足你。如果為空,它就會一下從windows底層分配8n(最後一段會修正)長度的記憶體,向快查連結串列插入n項,再取出一項滿足你,這樣向底層請求的次數少了,系統效率就高了。

另外,堆管理器還會多分配幾個位元組儲存實際分配的記憶體長度,所以上面7位元組的請求實際應該分配8+4=12位元組,並返回第5個位元組的位址給你(假定以四位元組表示長度值,具體要多少位微軟也沒公佈)。當呼叫free時,也是最終請求堆管理器釋放記憶體,但通常情況下它只會從返回位址的前幾個位元組找到分配時記錄的長度資訊,然後把這塊記憶體的位址插入到相應的快查連結串列中。

快查連結串列為於程序的系統位址空間部分,使用者模式的程序對其沒有訪問許可權,只有windows本身和核心模式的驅動程式才能訪問。

2樓:107的週末

這個請研究過作業系統的儲存器管理的人來解決下。

3樓:網友

malloc函式。

函式宣告(函式原型):

void *malloc(int size);

說明:malloc 向系統申請分配指定size個位元組的記憶體空間。返回型別是 void* 型別。

void* 表示未確定型別的指標。c,c++規定,void* 型別可以強制轉換為任何其它型別的指標。

從函式宣告上可以看出。malloc 和 new 至少有兩個不同: new 返回指定型別的指標,並且可以自動計算所需要大小。比如:

int *p;

p = new int; /返回型別為int* 型別(整數型指標),分配大小為 sizeof(int);

或: int* parr;

parr = new int [100]; 返回型別為 int* 型別(整數型指標),分配大小為 sizeof(int) *100;

而 malloc 則必須由我們計算要位元組數,並且在返回後強行轉換為實際型別的指標。

int* p;

p = int *)malloc (sizeof(int));

第一、malloc 函式返回的是 void * 型別,如果你寫成:p = malloc (sizeof(int));則程式無法通過編譯,報錯:「不能將 void* 賦值給 int * 型別變數」。

所以必須通過 (int *)來將強制轉換。

第。二、函式的實參為 sizeof(int) ,用於指明乙個整型資料需要的大小。如果你寫成:

int* p = int *)malloc (1);

**也能通過編譯,但事實上只分配了1個位元組大小的記憶體空間,當你往裡頭存入乙個整數,就會有3個位元組無家可歸,而直接「住進鄰居家」!造成的結果是後面的記憶體中原有資料內容全部被清空。

malloc 也可以達到 new 的效果,申請出一段連續的記憶體,方法無非是指定你所需要記憶體大小。

比如想分配100個int型別的空間:

int* p = int *)malloc ( sizeof(int) *100 );分配可以放得下100個整數的記憶體空間。

另外有一點不能直接看出的區別是,malloc 只管分配記憶體,並不能對所得的記憶體進行初始化,所以得到的一片新記憶體中,其值將是隨機的。

除了分配及最後釋放的方法不一樣以外,通過malloc或new得到指標,在其它操作上保持一致。

鎖的原理是什麼?開鎖原理是什麼啊

密碼,簡單來說就是配對!開鎖原理是什麼啊?自鎖原理是什麼?簡單介紹 鎖的旋轉內軸上有一排孔,那裡面是放小銅柱的,而與內軸配合的鎖體上也有相應的一排小孔,也放了一排銅柱,內軸上的銅柱比較短,所以內壁上的銅鑄插入了內軸內,使內軸不能轉動,只有插入鑰匙後,按照不同的高度將小銅柱頂起,使內壁上的銅柱恰好離開...

跳閘的原理是什麼啊,電閘跳閘的原理是什麼?

電路超付和。或者是短路啊。 文得課堂 原理 因事故而自動斷開斷路器。向電力機車供電的牽引供電系統的安全執行應該得到保證。一旦發生事故,安裝於牽引變電所 開閉所 分割槽亭 內的繼電保護裝置即被事故產生的短路電流啟動,自動將向事故點供電的斷路器斷開,以縮小事故範圍,保證其他裝置的安全執行和向非事故線路正...

函式訊號發生器的原理是什麼,函式訊號發生器原理圖

函式訊號發生器是可用於測試或檢修各種電子儀器裝置中的低頻放大器的頻率特性 增益 通頻帶,也可用作高頻訊號發生器的外調變訊號源。顧名思義肯定可以產生函式訊號源,如一定頻率的正弦波,有的可以電壓輸出也有的可以功率輸出。下面我們用簡單的例子,來說明函式訊號發生器原理。結構組成 訊號發生器系統主要由下面幾個...