本次記錄程式的記憶體分割槽模型,還請各位大佬批評指正!
c++程式在執行時,將記憶體大方向劃分為4個區域:
1、**區:存放函式體的二進位制**,有作業系統進行管理(寫的所有**放在該區域)
2、全域性區:存放全域性變數和靜態變數以及常量
3、棧區:由編譯器自動分配釋放,存放函式的引數值,區域性變數
4、堆區:由程式設計師分配和釋放,若程式設計師不釋放,程式結束時由作業系統**
記憶體四區的意義:不同區域存放的資料,賦予不同的生命週期,給我們更大的靈活程式設計。
一、程式執行前
在程式編譯後,生成了exe可執行程式,未執行該程式前分為兩個區域
1、**區
存放cpu執行的機器指令。
**區是共享的,目的是對於頻繁被執行的程式,只需要在記憶體中有乙份**即可。
**區是唯讀的,使其唯讀的原因是防止程式意外修改了它的指令。
2、全域性區
全域性變數、靜態變數和常量存放在此。
全域性區還包含了常量區,字串常量和其他常量(const修飾的變數)也存放在此。
該區域的資料在程式結束後由作業系統釋放。
(1)不在全域性區中:
區域性變數;
const修飾的區域性變數(區域性常量)。
(2)在全域性區中:
全域性變數;
靜態變數(static);
常量(字串常量、const修飾的全域性變數(全域性常量))。
總結:
(1)c++在程式執行前分為全域性區和**區;
(2)**區的特點是共享和唯讀;
(3)全域性區存放全域性變數、靜態變數和常量;
(4)常量區中存放const修飾的全域性變數(全域性常量)和字串常量。
二、程式執行後
3、棧區:
由程式設計師分配和釋放,若程式設計師不釋放,程式結束時由作業系統**。
在c++中主要利用new在堆區開闢記憶體。
總結:堆區資料由程式設計師管理開闢和釋放。
堆區資料利用new關鍵字進行開闢記憶體。
三、new操作符
c++中主要利用new操作符在堆區開闢資料。
堆區開闢的資料,由程式設計師手動開闢,手動釋放,釋放利用操作符delete。
利用new建立的資料,會返回該資料對應的型別的指標。
1、區域性變數a、b和const修飾的區域性變數(區域性常量)c_l_a、c_l_b的位址相近,都不在全域性區中。
2、而全域性變數g_a、g_b,靜態變數s_a、s_b,字串常量和全域性常量c_g_a、c_g_b的位址相近都位於全域性區中。
#include#include #includeusing namespace std;
//全域性變數
int g_a = 10;
int g_b = 10;
//const修飾的全域性變數,全域性常量
const int c_g_a = 10;
const int c_g_b = 10;
int main()
#include#include #includeusing namespace std;
//棧區資料注意事項 --- 不要返回區域性變數的位址
//棧區資料由編譯器管理、開闢和釋放
int * func1(int b) //形引數據也會放在棧區
int main()
利用new關鍵字可以將資料開闢到堆區!
#include#include #includeusing namespace std;
//堆區
int* func2() //
int main()
利用new關鍵字可以將資料開闢到堆區,如果想釋放,利用關鍵字delete!
new返回的是該資料型別的指標!
#include#include #includeusing namespace std;
//new的基本語法
int * func3() //
void test01()
//在堆區利用new開闢陣列
void test02()
for (int i = 0; i < 10; i++)
//釋放堆區陣列 要加中括號才可以
delete arr;
}int main()
C 自學筆記
本次記錄結構體,還請各位大佬批評指正!結構體屬於使用者自定義的資料型別,允許使用者儲存不同的資料型別 整型 浮點型 字元型 布林型 即不同資料型別的集合所組成的乙個型別。建立學生資料型別,然後通過學生資料型別建立具體的學生。通過結構體建立變數的方式有三種 1 struct 結構體名 變數名 2 st...
C 自學筆記
本次記錄函式提高,還請各位大佬批評指正!在c 中,函式的形參列表中的形參是可以有預設值的。語法 返回值型別 函式名 引數 預設值 注意事項 1 如果某個位置有預設引數,那麼從這個位置之後,從左往右都必須有預設值。2 如果函式的宣告有預設引數,那麼函式的實現就不能有預設引數。宣告和實現只能有乙個有預設...
C 自學筆記
筆記整理自 菜鳥c 教程 物件導向,區分大小寫 寫法 include 或include stdio.h iostream.h iostream的區別 static 區域性變數,檔案內全域性變數 extern 所有檔案可見變數 thread local 執行緒內變數 值 i j,實參i,形參j,i賦值...