記憶體管理 預處理與結構體

2021-08-16 21:34:49 字數 798 閱讀 5516

1.未初始化的全域性變數(.bss段)

用來存放那些沒有初始化和初始化為零的全域性變數。

2.初始化過的全域性變數(.data)

裡面存放那些初始化為非零的全域性變數。

3.常量資料(.rodata段)

ro代表ready only,rodata就是用來存放常量資料的。在多個程序是共享的,這樣可以提高執行空間利用率。

4.**(.text段)

存放**和部分整數常量,它與rodata段很像,主要不同在於這個段是可以執行的。

5桟(stack)

桟用於存放臨時變數和函式引數。桟作為一種基本資料結構,可以用來實現函式的呼叫。通常情況下,桟向下(低位址)增長,每向桟中push乙個元素,桟頂就向低位址擴充套件,每從桟中pop乙個元素,桟頂就向高位址退回。

6.堆(heep)

堆是最靈活的一種記憶體,它的使用週期完全由使用者控制。

malloc:用來分配指定大小的記憶體;

realloc:用來調整/重新分配一塊存在的記憶體。

free:用來釋放不再使用的記憶體。

7.記憶體分配方式

(1)從靜態儲存區域分配

(2)在桟上建立

(3)從堆上分配,亦稱動態記憶體分配。

8.巨集定義:define

巨集定義是由源程式中的巨集定義命令完成的。巨集替換是由預處理程式自動完成的,在c中,巨集分為有引數和無引數兩鐘。

9.結構體

宣告乙個結構體型別的一般形式為:

struct

結構體名   {成員表列};

如:struct

student

;

記憶體管理與預處理,結構體問題

1 bss段 直觀來說即存放沒有初始化或者初始化為0的全域性變數,一定是全域性變數。2 data 通俗來說 data段 和 bss 沒有太大的區別,只是前者是存放未初始化或者初始化為0的全域性變數,而後者是用來存放那些初始化不為0的全域性變數。注意 兩個都只是存放的全域性變數 3 段 直觀理解為函式...

2018 3 13預習記憶體管理,預處理,結構體

1.linux虛擬位址空間 4g記憶體 1g核心空間和3g使用者空間 使用者空間 資料段 全域性資料 static靜態區 段 常量 棧 區域性變數,形參 堆 malloc分配位址,realloc調整記憶體位址,free釋放記憶體位址 每個區間的四個屬性 r 唯讀,w修改,x 可執行,p s 是否共享...

預處理與結構體

巨集定義 檔案包含 條件編譯1 巨集定義不是說明或語句,不需要在結尾加上分號 2 巨集定義必須寫在函式之外,其作用域是巨集定義命令起到源程式結束,如需要終止可使用 undef命令 3 預處理程式不對巨集定義做任何檢查,如有錯誤,只能在編譯被巨集定義展開後的源程式時發現1 巨集會在編譯器在對源 進行編...