記憶體四區筆記

2021-07-13 12:44:37 字數 960 閱讀 8230

#include #include #include void print_arr(int *buf, int n) 

}int main() ; //棧中陣列

// void *malloc (size_t __size)

char *p1 = malloc(sizeof(char) * 1000);

free(p1);

int *p = malloc(sizeof(int) * 100); //在堆中申請記憶體,大小為100個int,當陣列用

memset(p, 0, sizeof(int) * 100); //初始化

int i;

for (i = 0; i < 100; ++i)

print_arr(p, 100);

free(p);

}

#include #include //既要申請記憶體,又要有變數指向該記憶體,這樣此時有效的,缺一不可。

//記憶體釋放與否 vs 作用域規則 是兩碼事

//只不過棧中變數隨作用域具有一致性,出了作用域,棧記憶體也釋放了

//而堆中變數出了作用域,變數失效,但堆記憶體若沒有手動釋放,則依然存在

//嚴重錯誤

void getheap(int *p)

//改正,利用二級指標

void getheap1(int **p)

int main7()

//錯誤,不能將乙個棧變數的位址通過函式的返回值返回,函式執行結束(出了作用域),棧位址就自動釋放了,相當於野指標

int *geta()

//正確,可以通過函式的返回值返回乙個堆位址,但記得,一定要free

int *geta1()

//正確,a在靜態區,不用free

int *geta2()

int main6()

C C 筆記 記憶體四區模型

作業系統給c c 編寫的程式分配記憶體,通常將分配的記憶體劃分為以下四個區域 用於存放函式的引數值,區域性變數的值等。其操作方式類似於資料結構中的棧。用完由作業系統自動釋放,一般是由編譯器自動分配釋放的。棧向下生長,棧分配的位址越來越小。動態分配給程式的記憶體區域,由程式設計師手動釋放,若程式設計師...

記憶體四區專題

程式的記憶體四區模型 1.作業系統把物理硬碟 load到記憶體中 2.作業系統把c 分成四個區 3.作業系統找到main函式入口執行 4.在被呼叫函式裡面malloc的記憶體,首位址傳給別呼叫哪個函式有兩種方法 a.return b.指標做函式引數 5.主呼叫函式分配的記憶體 堆 stack 全域性...

1 記憶體四區

資料型別的概念 型別 是對資料的抽象,型別相同的資料有相同的表現形式 儲存格式以及相關的操作。程式當中使用的所有資料都必定屬於某一種資料型別。資料型別的本質 資料型別可以理解為建立變數的模具,是固定記憶體大小的別名。資料型別為編譯器預算物件 變數 分配指定的記憶體空間大小。資料型別的別名 inclu...