C語(yǔ)言 動(dòng)態(tài)內(nèi)存分配詳解
C語(yǔ)言 動(dòng)態(tài)內(nèi)存分配詳解
動(dòng)態(tài)內(nèi)存分配涉及到堆棧的概念:堆棧是兩種數(shù)據(jù)結(jié)構(gòu)。堆棧都是數(shù)據(jù)項(xiàng)按序排列的數(shù)據(jù)結(jié)構(gòu),只能在一端(稱為棧頂(top))對(duì)數(shù)據(jù)項(xiàng)進(jìn)行插入和刪除。
棧(操作系統(tǒng)):由操作系統(tǒng)自動(dòng)分配釋放 ,存放函數(shù)的參數(shù)值,局部變量的值等。其操作方式類似于數(shù)據(jù)結(jié)構(gòu)中的棧。
堆(操作系統(tǒng)): 一般由程序員分配釋放, 若程序員不釋放,程序結(jié)束時(shí)可能由OS回收,分配方式倒是類似于鏈表。
\在C語(yǔ)言中,全局變量分配在內(nèi)存中的靜態(tài)存儲(chǔ)區(qū),非靜態(tài)的局部變量(包括形參)是分配在內(nèi)存的動(dòng)態(tài)存儲(chǔ)區(qū),該存儲(chǔ)區(qū)被稱為棧。除此之外,c語(yǔ)言還允許建立內(nèi)存動(dòng)態(tài)分配區(qū)域,以存放一些臨時(shí)用的數(shù)據(jù),這些數(shù)據(jù)不必在程序的聲明部分定義,也不必等到函數(shù)結(jié)束時(shí)才釋放,而是需要時(shí)隨時(shí)開(kāi)辟,不需要是隨時(shí)釋放。這些詩(shī)句臨時(shí)存在一個(gè)特別的自由存儲(chǔ)區(qū),稱為堆區(qū)。
系統(tǒng)提供了四個(gè)庫(kù)函數(shù)來(lái)實(shí)現(xiàn)內(nèi)存的動(dòng)態(tài)分配:
(1)malloc(size) 在內(nèi)存的動(dòng)態(tài)存儲(chǔ)區(qū)中分配一個(gè)長(zhǎng)度為size的連續(xù)空間。
(2)calloc(n,size) 在內(nèi)存的動(dòng)態(tài)存儲(chǔ)區(qū)中分配n個(gè)長(zhǎng)度為size的連續(xù)空間。
(3)free(p) 釋放指針變量p做指向的動(dòng)態(tài)空間。
(4)realloc(p,size) 將指針變量p指向的動(dòng)態(tài)空間大小改變?yōu)閟ize。
舉個(gè)栗子:
#include<stdio.h>
#include<stdlib.h>
int main()
{
void check(int *);
int *p1, i;
p1 = (int *)malloc(5*sizeof(int));
for ( i = 0; i < 5; i++)
scanf("%d",p1+i);
check(p1);
getchar();
getchar();
return 0;
}
void check(int *p)
{
int i;
for (i = 0; i < 5; i++)
if (p[i] < 60) printf("%d", p[i]);
printf("\n");
}
程序沒(méi)有定義數(shù)組,而是開(kāi)辟了一段動(dòng)態(tài)自由分配區(qū),輸入數(shù)字時(shí),按照地址復(fù)制給動(dòng)態(tài)數(shù)組的5個(gè)元素,p1指向第一個(gè)整型數(shù)據(jù),調(diào)用check函數(shù)時(shí),p1作為實(shí)參傳遞給形參p,因此可以理解為形參p和實(shí)參p1公享一段動(dòng)態(tài)分配區(qū)。
感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
- C語(yǔ)言 動(dòng)態(tài)內(nèi)存分配的詳解及實(shí)例
- C語(yǔ)言動(dòng)態(tài)內(nèi)存分配的詳解
- C語(yǔ)言中關(guān)于動(dòng)態(tài)內(nèi)存分配的詳解
- c語(yǔ)言詳解動(dòng)態(tài)內(nèi)存分配及常見(jiàn)錯(cuò)誤的解決
- C語(yǔ)言編程C++動(dòng)態(tài)內(nèi)存分配示例講解
- C語(yǔ)言動(dòng)態(tài)內(nèi)存分配函數(shù)的實(shí)現(xiàn)
- C語(yǔ)言動(dòng)態(tài)內(nèi)存分配圖文講解
- c語(yǔ)言動(dòng)態(tài)內(nèi)存分配知識(shí)點(diǎn)及實(shí)例
- 深入了解C語(yǔ)言中的動(dòng)態(tài)內(nèi)存分配
- C語(yǔ)言實(shí)現(xiàn)動(dòng)態(tài)內(nèi)存分配
相關(guān)文章
c++中explicit與mutable關(guān)鍵字的深入探究
這篇文章主要給大家介紹了關(guān)于c++中explicit與mutable關(guān)鍵字的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-05-05
Linux/C++多線程實(shí)例學(xué)習(xí)十字路口車輛調(diào)度
這篇文章主要為大家介紹了Linux/C++多線程實(shí)例學(xué)習(xí)十字路口車輛調(diào)度示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-05-05
C語(yǔ)言通訊錄管理系統(tǒng)課程設(shè)計(jì)
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言通訊錄管理系統(tǒng)課程設(shè)計(jì),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-02-02

