關於free如何知道要釋放多少記憶體空間長度的問題

2022-08-03 23:51:21 字數 609 閱讀 8228

背景:前兩天在面試時,對方問了malloc()申請記憶體時需要指定申請多大的記憶體空間,為什麼free()釋放記憶體時只需要傳遞乙個指標而不需要指定釋放多大的記憶體空間。

現在就來**和研究一下,malloc申請記憶體空間大小的值到底被儲存在**了。 

測試**:(開發工具:vc++6.0)

1 #include 2

3#define memset 1045

intmain()613

free

(p);

14 p =null;

15return0;

16 }

在該記憶體塊首位址前地16個位元組的位置有個的數值,而0x28=40(十進位制)。可以看出在記憶體首位址前16個位元組處存放了申請記憶體塊大小的數值(實際上我測試了多組資料,得出的結論都是一樣的)。

void *malloc( size_t size ); // 引數size為需要申請記憶體空間的數量

void free( void* memblock ); // 引數memblock為需要釋放記憶體的指標

關於 define你知道多少?

編譯乙個c c 程式需要很多步驟,通常,我們第一步都是預處理階段,它的主要任務包括 刪除注釋,插入被include包含的檔案內容,定義和替換,以及確定 部分參與編譯的內容。預定義符號是由預處理器定義的符號,它的值一般是字串常量或者是十進位制的數字常量 符 號 含 義 例 子 file 進行編譯的源檔...

如何知道Bitcoin Wallet有多少錢?

bitcoin network 大致上有兩種 node 如果只有 full node 那我們就不用去想設計 merkle tree 以及後來的 bloom filter 那麼這個世界就簡單多了。但為了要讓 bitcoin wallet 錢包 可以通行所有裝置,特別是手機,spv node 就很重要了...

linux如何手動釋放記憶體?為什麼要釋放記憶體?

前言 當在linux下頻繁訪問檔案後,物理記憶體會很快被用光,當程式結束後,記憶體不會被正常釋放,而是一直作為caching。這個問題,貌似有不少人在問,不過都沒有看到有什麼很好解決的辦法。那麼我來談談這個問題怎麼解決?proc是乙個虛擬檔案系統,可通過對它的讀寫操作做為與kernel實體間進行通訊...