int *p = (int*)malloc(4);
malloc 包含在“malloc.h”頭檔案中
(int*)強制類型轉換
malloc函數隻有一個形參,并且形參是整型
4 表示請求系統為本程式配置設定4個位元組
malloc函數會為我們配置設定記憶體,隻能傳回第一個位元組位址
該行代碼配置設定了8個位元組,p變量占4個位元組,p所指向的記憶體也占4個位元組
p本身所占的記憶體是靜态的,p所指向的記憶體是動态配置設定的
free(p)表示把p所指向的記憶體給釋放掉,p本身是靜态的,不能由程式員手動釋放
int *p; p = (int*)malloc(sizeof(int) * 128); //配置設定128個(可根據實際需要替換該數值)整型存儲單元,malloc申請的是虛拟記憶體,并不是實體記憶體 //并将這128個連續的整型存儲單元的首位址存儲到指針變量p中 double *pd = (double*)malloc(sizeof(double) * 12); //配置設定12個double型存儲單元, //并将首位址存儲到指針變量pd中
第一、malloc 函數傳回的是 void * 類型。 對于C++,如果你寫成:p = malloc (sizeof(int)); 則程式無法通過編譯,報錯:“不能将 void* 指派給 int * 類型變量”。 是以必須通過 (int *) 來将強制轉換。而對于C,沒有這個要求,但為了使C程式更友善的移植到C++中來,建議養成強制轉換的習慣。 第二、函數的實參為 sizeof(int) ,用于指明一個整型資料需要的大小。
malloc()函數其實就在記憶體中找一片指定大小的空間,然後将這個空間的首位址範圍給一個指針變量,這裡的指針變量可以是一個單獨的指針,也可以是一個數組的首位址,這要看malloc()函數中參數size的具體内容。我們這裡malloc配置設定的記憶體空間在邏輯上連續的,而在實體上可以連續也可以不連續。對于我們程式員來說,我們關注的是邏輯上的連續,因為作業系統會幫我們安排記憶體配置設定,是以我們使用起來就可以當做是連續的。
可以通過malloc(size_t)函數調用申請超過機器實體記憶體大小的記憶體塊。 記憶體洩漏一般是指程式申請了一塊記憶體,使用完後,沒有及時将這塊記憶體釋放,進而導緻程式占用大量記憶體。 無法通過記憶體釋放函數free(void*)直接将某塊已經使用完的實體記憶體直接還給作業系統。