關於動態申請記憶體malloc的知識

2021-08-15 19:25:33 字數 1322 閱讀 1229

關於malloc申請記憶體的函式

一、定義

malloc函式是一種分配長度為num_bytes位元組的記憶體塊的函式,可以向系統申請分配指定size個位元組的記憶體空間。malloc的全稱是memory allocation,中文叫動態記憶體分配,

函式返回的型別是void*型別。void*表示未確定的型別。

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

二、函式宣告與使用

標頭檔案#include

或者#include

void *malloc(size_t size);

備註:void* 表示未確定型別的指標,void *可以指向任何型別的資料,更明確的說是指申請記憶體空間時還不知道使用者是用這段空間來儲存什麼型別的資料(比如是char還是int或者其他資料型別)。

三、與new的區別

1)從本質上來說,malloc(linux上具體實現可以參考man malloc,glibc通過brk()&mmap()實現)是libc裡面實現的乙個函式,如果在source code中沒有直接或者間接include過stdlib.h,那麼gcc就會報出error:『malloc』 was not declared in this scope。如果生成了目標檔案(假定動態鏈結malloc),如果執行平台上沒有libc(linux平台,手動指定ld_library_path到乙個空目錄即可),或者libc中沒有malloc函式,那麼會在執行時(run-time)出錯。new則不然,是c++的關鍵字,它本身不是函式。new不依賴於標頭檔案,c++編譯器就可以把new編譯成目標**(g++4.6.3會向目標中插入_znwm這個函式,另外,編譯器還會根據引數的型別,插入相應的建構函式)。

2)在使用上來說

1、new 返回指定型別的指標,並且可以自動計算所需要大小 

int *p;

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

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

int *p;

p = (int*)malloc(sizeof(int) * 128);//分配128個(可根據實際需要替換該數值)整型儲存單元,//並將這128個連續的整型儲存單元的首位址儲存到指標變數p中

double *pd = (double*)malloc(sizeof(double) * 12);//分配12個double型儲存單元,//並將首位址儲存到指標變數pd中

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

malloc動態申請記憶體

1 malloc概述 malloc num 動態申請num位元組的記憶體空間,函式申請成功返回記憶體的起始位址 void型 申請不成功返回null指標,malloc不初始化記憶體空間 calloc type,num 函式會初始化申請的記憶體空間為0 使用完申請的記憶體後需要用free p 釋放記憶體...

malloc函式申請動態記憶體的用法

咱們開門見山吧,直接上 更容易理解 an highlighted block 1 include 2 include 3 include 45 struct student 6 1011 intmain 1220 21 p student name tom 22 p student age 23 2...

malloc申請堆記憶體

malloc申請空間時,記錄其空間大小 其空間上方,有乙個資料頭,頭部資訊就記錄了申請空間的大小 當呼叫free函式時,即需要讀取頭部資訊得到需要釋放的位元組數 malloc申請的空間,一 申請的記憶體 小的靠近資料區 大的靠近棧區,而中間的是 無人區 malloc工作在user space 使用者...