C语言动态内存管理和动态内存分配
動(dòng)態(tài)內(nèi)存管理同時(shí)還具有一個(gè)優(yōu)點(diǎn):當(dāng)程序在具有更多內(nèi)存的系統(tǒng)上需要處理更多數(shù)據(jù)時(shí),不需要重寫(xiě)程序。標(biāo)準(zhǔn)庫(kù)提供以下四個(gè)函數(shù)用于動(dòng)態(tài)內(nèi)存管理:
(1) malloc()、calloc()
分配新的內(nèi)存區(qū)域。
(2) realloc()
調(diào)整已分配的內(nèi)存區(qū)域。
(3) free()
釋放已分配的內(nèi)存區(qū)域。
上述所有函數(shù)都聲明在頭文件 stdlib.h 中。對(duì)象在內(nèi)存中所占空間的大小是以字節(jié)數(shù)量為單位計(jì)算的。許多頭文件(包括 stdlib.h)專(zhuān)門(mén)定義了類(lèi)型 size_t 用來(lái)保存這種內(nèi)存空間的相關(guān)信息。例如,sizeof 運(yùn)算符以類(lèi)型 size_t 返回字節(jié)數(shù)量。
動(dòng)態(tài)內(nèi)存分配
兩個(gè)內(nèi)存分配函數(shù) malloc()和 calloc()的參數(shù)不一樣:
void*malloc(size_t size);函數(shù) malloc()分配連續(xù)的內(nèi)存區(qū)域,其大小不小于 size。當(dāng)程序通過(guò) malloc()獲得內(nèi)存區(qū)域時(shí),內(nèi)存中的內(nèi)容尚未決定。
void*calloc(size_t count,size_t size);函數(shù) calloc()分配一塊內(nèi)存區(qū)域,其大小至少是 count_size。換句話說(shuō),上述語(yǔ)句分配的空間應(yīng)足夠容納一個(gè)具有 count 個(gè)元素的數(shù)組,每個(gè)元素占用 size 個(gè)字節(jié)。而且,calloc()會(huì)把內(nèi)存中每個(gè)字節(jié)都初始化為 0。
兩個(gè)函數(shù)都返回 void 指針,這種指針被稱(chēng)為無(wú)類(lèi)型指針(typeless pointer)。返回指針的值是所分配內(nèi)存區(qū)域中第一個(gè)字節(jié)的地址,當(dāng)分配內(nèi)存失敗時(shí),返回空指針。
原文鏈接
本文為云棲社區(qū)原創(chuàng)內(nèi)容,未經(jīng)允許不得轉(zhuǎn)載。
總結(jié)
以上是生活随笔為你收集整理的C语言动态内存管理和动态内存分配的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: MongoDB compact 命令详解
- 下一篇: 透过 In-memory Channel