C語言中一些關於記憶體四區的歸納
C語言中一些關於記憶體四區的歸納
博文參考傳送門
一、綜述
C語言程式中,程式碼是放在記憶體中執行的,我們大致將程式所佔用的記憶體分為四個區域:
-
棧區 堆區 資料區 程式碼區
每個程式都有唯一一個記憶體四區,我們應該掌握各個區域的特性,例如儲存哪種型別的資料,由誰去申請開闢,又由誰去管理釋放等等。
二、記憶體四區介紹
1. 棧區
由編譯器自動分配釋放,比如存放函式的引數值,區域性變數等。
例如:
void recive(int a,int b) {
int c;
}
其中,引數a,引數b和變數c都是存放在棧區,當函式執行完畢的時候,它們佔有的空間自動釋放。
2. 堆區
一般由程式設計師分配釋放(如動態記憶體申請<malloc函式>),若程式設計師不釋放,程式結束時可能由作業系統回收。
例如:
char *src;
src = (char*)malloc(4 *sizeof(char));//動態分配記憶體,表示查詢可用的連續4個位元組記憶體的空間,並將該記憶體首地址強制轉換為指向字元資料的指標賦給scr,為src這個指標變數分配4個char型別的空間。
3.資料區
分為兩種:1、常量區:存放常量,一般是字串常量。
2、全域性區(靜態區):存放全域性變數和靜態變數。
該區域是在程式結束後由作業系統釋放。
4.程式程式碼區
這個區域存放函式體的二進位制程式碼,也是由作業系統進行管理。
三、劃分記憶體四區的意義
C語言程式中,根據是區域性變數,全域性變數,常量還是其他,通過malloc等類似的函式分配記憶體空間,把他們放到對應的記憶體區中,這樣就賦予了這些變數或常量不同的生命週期。
根據我們程式的需要,我們在編寫程式碼過程中,宣告不同的變數型別,使他們有不同的宣告長度,不同的釋放方式,可以讓我們更加靈活地程式設計。
四、記憶體四區的一個例項
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i;
char* p1[3]= {"abc","def","ghi"};
char p2[3][4]= {"123","456","789"};
char** p3= (char**)malloc( 3 * sizeof(char*));
for(i=0;i < 3;i++)
{
p3[i]= (char *)malloc ( 5 * sizeof(char));
sprintf(p3[i],"%d%d%d",i,i,i);
/*
sprintf()函式:最常見的應用之一是把整數列印到字串中
例如:
srpintf(s,"%d",123);
輸出為:"123"
輸出結果不會列印在螢幕上,而是寫入字串中
*/
printf("%s\n",p3[i]);
/*
printf()函式才將結果輸出到螢幕上
*/
}
free(p3);
return 0;
}
示例程式碼圖示:
相關文章
- C 語言中的指標和記憶體洩漏指標記憶體
- 關於記憶體的一些bug (轉)記憶體
- 關於C中記憶體操作記憶體
- C語言中&&,||,&,| 的區別C語言
- 關於c語言記憶體分配,malloc,free,和段錯誤,記憶體洩露C語言記憶體洩露
- 程式的記憶體四區模型記憶體模型
- C語言中 struct成員變數順序對記憶體的佔用C語言Struct變數記憶體
- c語言中的關鍵字C語言
- 第1天 C語言Dev-Cpp環境搭建及使用、C語言記憶體四區C語言dev記憶體
- 關於記憶體中棧和堆的區別記憶體
- C語言的記憶體分配C語言記憶體
- android 關於記憶體優化的一些總結Android記憶體優化
- [IOS]關於Obj-C記憶體管理的規則iOSOBJ記憶體
- C語言-記憶體分配C語言記憶體
- C語言:記憶體使用C語言記憶體
- Hp ux 的一些關於記憶體監控的說明UX記憶體
- C語言-記憶體管理之一[記憶體分配]C語言記憶體
- C語言-記憶體管理之二[記憶體指令]C語言記憶體
- 關於redis記憶體分析,記憶體優化Redis記憶體優化
- C語言中的strlen與sizeof的區別C語言
- 關於程式的實體記憶體RSS記憶體
- 記憶體管理中關於記憶體每次增長的大小記憶體
- 關於C++ delete 來釋放new分配的記憶體C++delete記憶體
- 關於autoreleasepool記憶體管理記憶體
- 關於記憶體錯誤記憶體
- 關於記憶體對齊記憶體
- C語言中結構體感悟C語言結構體
- C++程式語言中的四個除錯技巧C++除錯
- C語言中const和#define的區別C語言
- c語言中的變數儲存區域C語言變數
- C語言記憶體對齊C語言記憶體
- 關於JavaScript的記憶體機制JavaScript記憶體
- html標記歸納HTML
- C語言中關鍵字typedef、enum的使用C語言
- C語言中volatile關鍵字的作用C語言
- 常用Markdown語法歸納
- C 有關記憶體的小謎題記憶體
- C語言中的#和##C語言