全域性變數和靜態變數分配在記憶體中的
靜態變數區(全域性變數區),普通區域性變數(包括形參)是分配在記憶體中的動態儲存區的,這個儲存區是成為
棧的區域。除此之外c語言還允許建立記憶體動態分配區域,以存放一些臨時用的資料,這些資料需要時隨時開闢,不需要時隨時釋放,生命週期從呼叫malloc函式時建立,呼叫free函式時銷毀。這些資料時臨時存放在乙個特殊的自由儲存區,稱為
堆區。可以根據需要,向系統申請所需大小的空間。
void siftprime(int n)
int i;
for(i=0;ifree(p);
//malloc函式與free函式搭配使用,free()釋放記憶體,防止記憶體洩露 }
int main()
其作用是釋放指標所指向的動態空間,使這部分空間能重新被其他變數使用。free函式沒有返回值。
/*int a=10;
int*p=(int *)malloc(a*sizeof(int));
for(int i=0;i<10;i++)
*/ 等同於calloc函式
int *p=(int *p)calloc( n,sizeof(int));
malloc它允許從空間記憶體池中分配記憶體,malloc()的引數是乙個指定所需位元組數的整數.
例如:int*p=(int*)malloc(n*sizeof(int));
colloc與malloc類似,但是主要的區別是儲存在已分配的記憶體空間中的值預設為0,使用malloc時,已分配的記憶體中可以是任意的值.
colloc需要兩個引數,第乙個是需要分配記憶體的變數的個數,第二個是每個變數的大小.
例如:int*p=(int*)colloc(n,sizeof(int));
如果已通過malloc函式或calloc函式獲得了動態空間,想改變其大小(擴容),可以用realloc函式重新分配。
p=(int*)realloc(p,80);
用realloc函式將p所指向的動態空間的大小改變為80,p的值不變,如果重分配不成功,返回null。
c語言動態記憶體分配 C 動態記憶體分配
動態記憶體分配 雖然通過陣列就可以對大量的資料和物件進行有效地管理,但是很多情況下,在程式執行之前,我們並不能確切地知道陣列中會有多少個元素。這種情況下,如果陣列宣告過大,就會造成浪費 宣告過小,就會影響處理。在c 中,動態記憶體分配技術可以保證程式在執行過程中按照需要申請適量記憶體,使用後釋放,從...
C語言動態記憶體分配
c語言動態記憶體分配 動態資料結構可以在執行時靈活新增 刪除或重排資料項。在執行時分配記憶體空間的過程稱為動態記憶體分配。記憶體分配函式如下 malloc 分配所需的位元組大小,並返回指向所分配空間的第乙個位元組的指標 calloc 為元素陣列分配空間,並初始化為零,然後返回指向該記憶體的指標 fr...
C語言 動態記憶體分配
c語言有儲存變數的區域稱之為棧 stack 除此之外 c語言還允許建立自己的動態記憶體區域 以存放一些臨時的資料 這區域稱之為 堆 heap 也就是存放執行時的資料 可以根據程式的需要 向系統申請所需大小的空間 由於未宣告部分定義他們為變數或者陣列因此只能通過指標去訪問 建立記憶體動態分配主要由4個...