C C 基礎知識記錄(堆和棧)

2021-09-13 00:03:44 字數 912 閱讀 1024

記錄下一些基礎知識。。。

一、程式記憶體分配

乙個由c/c++編譯的程式占用的記憶體分為以下幾個部分

1、棧區(stack)— 由編譯器自動分配釋放 ,存放函式的引數值,區域性變數的值等。其操作方式類似於資料結構中的棧。

2、堆區(heap)— 一般由程式設計師分配釋放, 若程式設計師不釋放,程式結束時可能由os** 。注意它與資料結構中的堆是兩回事,分配方式倒是類似於鍊錶,呵呵。

3、全域性區(靜態區)(static)—,全域性變數和靜態變數的儲存是放在一塊的,初始化的全域性變數和靜態變數在一塊區域, 未初始化的全域性變數和未初始化的靜態變數在相鄰的另一塊區域。 - 程式結束後有系統釋放

4、文字常量區—常量字串就是放在這裡的。 程式結束後由系統釋放

5、程式**區—存放函式體的二進位制**

二、示例**

int a = 0; //全域性初始化區

int a = 0; //全域性初始化區

char *p1; //全域性未初始化區

main() {

int b; //棧

char s = "abc"; //棧

char *p2; //棧

char *p3 = "123456"; //123456\0在常量區,p3在棧上。

static int c = 0; //全域性(靜態)初始化區

p1 = (char *)malloc(10);

p2 = (char *)malloc(20);

//分配得來得10和20位元組的區域就在堆區。

strcpy(p1, "123456"); //123456\0放在常量區,編譯器可能會將它與p3所指向的"123456"優化成乙個地方。

注意:p1和p2本身是在棧中

Java 基礎知識記錄

int整型 string字串型 char字元型 float,double浮點型別,即小數,使用float時小數後加f 輸出字元system.out.println hello world 每個println獨佔一行,print合併在同一行 自增 自減 加 減 乘 除法 餘數 與 或 非 短路與 短路...

Unity Shader 基礎知識記錄

首先謝謝大家的支援,其次如果你碰到什麼其他問題的話,歡迎來 我自己的乙個 討論群559666429來,大家一起找答案,共同進步 你能看到這篇文章,說明你最近在和我做一樣的事情 學習shader 由於也是剛開始學習,此處也是整理一些基礎的知識。unity官網資源 著色器 貓都能學會的unity sha...

python基礎知識記錄

1.python 必須頂格寫,除非是巢狀在其他語句中 2.每一層巢狀需要相差4個空格,且同一級 必須對齊 3.當行注釋用 多行注釋用 三引號 注釋 或 注釋 4.if while for語句以冒號結尾,然後通過4個空格開始下一層 5.每行語句結尾不用 6.識別符號除了字母數字下劃線之外可以用中文 7...