1。 記憶體四區
1。1資料型別本質分析
1。1。1資料型別的概念
●“型別”是對資料的抽象
●型別相同的資料有相同的表示形式、儲存格式以及相關的操作
●程式中使用的所有資料都必定屬於某一種資料型別
1。1。2資料型別的本質
●資料型別可理解為建立變數的模具:是固定記憶體大小的別名。
●資料型別的作用:編譯器預算物件(變數)分配的記憶體空間大小。
●注意:資料型別只是模具,編譯器並沒有分酤空間,只有根據型別(模具)
建立變數(實物),編譯器才會分配空間。
1。2變數的本質分析
1。2。1變數的概念
概念:既能讀又能寫的記憶體物件,稱為變數;若一旦初始化後不能修改的物件則稱為常量。
變數定義形式:型別識別符號,識別符號,…,識別符號;
1。2。2變數的本質
1、程式透過變數來申請和命名記憶體空間int a = 0。
2、透過變數名訪問記憶體空間。
1。3程式的記憶體四區模型
流程說明
1、作業系統把物理硬碟程式碼load到記憶體
2、作業系統把c程式碼分成四個區
棧區( stack):由編譯器自動分配釋放,存放函式的引數值,區域性變數的值等
堆區(heap):一般由程式設計師分配釋放(動態記憶體申請與釋放),若程式設計師不釋放程式結束時可能由作業系統回收
全域性區(靜態區)( statIc):全域性變數和靜態變數的儲存是放在一塊的,初始化的全域性變數和靜態變數在一塊區域,未初始化的全域性變數和未初始化的靜態變數在相鄰的另一塊區域,該區域在程式結束後由作業系統釋放
常量區:字串常量和其他常量的儲存位置,程式結束後由作業系統釋放。
程式程式碼區:存放函式體的二進位制程式碼。
3、作業系統找到main函式入口執行
1。4函式呼叫模型
1。5函式呼叫變數傳遞分析
(1)
(2)
(3)
(4)
(5)
1。5棧的生長方向和記憶體存放方向
相關程式碼:
02_資料型別本質。c
#define _CRT_SECURE_NO_WARNINGS#include#include#include#include
03_給型別起別名。c
#define _CRT_SECURE_NO_WARNINGS#include#include#include#include
04_變數的賦值。c
#define _CRT_SECURE_NO_WARNINGS#include#include#include#include
05_全域性區分析。c
#define _CRT_SECURE_NO_WARNINGS#include#include#include#include
06_堆疊區分析。c
#define _CRT_SECURE_NO_WARNINGS#include#include#include#include
07_靜態區域性變數。c
#define _CRT_SECURE_NO_WARNINGS#include#include#include#include
08_棧的生長方向。c
#define _CRT_SECURE_NO_WARNINGS#include#include#include#include