您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關C語言如何實現(xiàn)動態(tài)內存的分配的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
1)全局變量——內存中的靜態(tài)存儲區(qū)
2)非靜態(tài)的局部變量——內存中的動態(tài)存儲區(qū)——stack 棧
3)臨時使用的數(shù)據(jù)—建立動態(tài)內存分配區(qū)域,需要時隨時開辟,不需要時及時釋放——heap 堆
4)根據(jù)需要向系統(tǒng)申請所需大小的空間,由于未在聲明部分定義其為變量或者數(shù)組,不能通過變量名或者數(shù)組名 來引用這些數(shù)據(jù),只能通過指針來引用)
1)頭文件#include
聲明了四個關于內存動態(tài)分配的函數(shù)
2)函數(shù)原型 void * malloc(usigned int size) //memory allocation
作用——在內存的動態(tài)存儲區(qū)(堆區(qū))中分配一個長度為 size 的連續(xù)空間。
形參 size 的類型為無符號整型,函數(shù)返回值是所分配區(qū)域的第一個字節(jié)的地址,即此函數(shù)是一個指針型函數(shù), 返回的指針指向該分配域的開頭位置。
malloc(100); 開辟 100 字節(jié)的臨時空間,返回值為其第一個字節(jié)的地址
3)函數(shù)原型void *calloc(unsigned n,unsigned size)
作用——在內存的動態(tài)存儲區(qū)中分配 n 個長度為 size 的連續(xù)空間,這個空間一般比較大,足以保存一個數(shù)組用 calloc 函數(shù)可以為一維數(shù)組開辟動態(tài)存儲空間,n 為數(shù)組元素個數(shù),每個元素長度為 size.函數(shù)返回指向所分配域的起始位置的指針;分配不成功,返回 NULL。p = calloc(50, 4); //開辟 50*4 個字節(jié)臨時空間,把起始地址分配給指針變量 p
4)函數(shù)原型:void free(void *p)
作用——釋放變量 p 所指向的動態(tài)空間,使這部分空間能重新被其他變量使用。p 是最近一次調用 calloc 或 malloc 函數(shù)時的函數(shù)返回值free 函數(shù)無返回值free (p ); // 釋放 p 所指向的已分配的動態(tài)空間
5) 函數(shù)原型void *realloc(void *p,unsigned int size)
作用——重新分配 malloc 或 calloc 函數(shù)獲得的動態(tài)空間大小,將 p 指向的動態(tài)空間大小改變?yōu)?size,p 的值不 變,分配失敗返回 NULLrealloc(p, 50); // 將 p 所指向的已分配的動態(tài)空間 改為 50 字節(jié)
6)返回類型說明
動態(tài)創(chuàng)建數(shù)組,輸入 5 個學生的成績,另外一個函數(shù)檢測成績低于 60 分的,輸出不合格的成績。
代碼演示
#include <stdlib.h> #include <stdio.h> int main() { void check(int *); int * p,i; // 在堆區(qū)開辟一個 5 * 4 的空間,并將地址 (void *) , 轉成 (int *) , 賦給 p p = (int *)malloc(5*sizeof(int)); for( i = 0; i < 5; i++) { scanf("%d", p + i); } check(p); // free(p); //銷毀 堆區(qū) p 指向的空間 getchar(); getchar(); return 0; } void check(int *p) { int i; printf("\n不及格的成績 有: "); for(i =0; i < 5; i++) { if(p[i] < 60) { printf(" %d ", p[i]); } } }
1)避免分配大量的小內存塊。分配堆上的內存有一些系統(tǒng)開銷,所以分配許多小的內存塊比分配幾個大內存塊的 系統(tǒng)開銷大
2)僅在需要時分配內存。只要使用完堆上的內存塊,就需要及時釋放它(如果使用動態(tài)分配內存,需要遵守原則: 誰分配,誰釋放), 否則可能出現(xiàn)內存泄漏
3)總是確保釋放以分配的內存。在編寫分配內存的代碼時,就要確定在代碼的什么地方釋放內存
4)在釋放內存之前,確保不會無意中覆蓋堆上已分配的內存地址,否則程序就會出現(xiàn)內存泄漏。在循環(huán)中分配內 存時,要特別小心
5)指針使用一覽
感謝各位的閱讀!關于“C語言如何實現(xiàn)動態(tài)內存的分配”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經查實,將立刻刪除涉嫌侵權內容。