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

2021-08-15 05:07:34 字數 902 閱讀 5826

1:(.bss段):直觀來說即存放沒有初始化或者初始化為0的全域性變數,一定是全域性變數。

2:(.data):通俗來說(.data段)和(.bss)沒有太大的區別,只是前者是存放未初始化或者初始化為0的全域性變數,而後者是用來存放那些初始化不為0的全域性變數。注意:兩個都只是存放的全域性變數

3:**段:直觀理解為函式堆疊而成的。

4:棧:棧用來存放區域性的變數和函式引數,當乙個函式用完這些區域性的變數之後,棧裡面的東西就會被釋放出來,棧可理解為乙個箱子,最先放進去的書本在最下面,若放箱子裝滿之後,最先取出的是最後放進去的書本,而最開始放進去的書本要最後才能取得出來。

5:堆:堆和棧最大的乙個區別在於棧的空間在那個函式用完之後會自己釋放,而在堆裡面的記憶體空間必須要使用者自己釋放,並且堆裡面存放的記憶體是使用者自己申請的記憶體空間,列:用malloc申請的空間在用完之後應用free釋放出來,否則會存在記憶體洩漏的問題產生。

6:巨集定義:格式:#define

識別符號字串。之後再函式中使用到識別符號的地方全部用字串代替

7:什麼是條件編譯:一般情況下**的每一行都會被編譯,但有時候需要在某些條件下對部分**進行編譯。

8:#和##的區別:#是把巨集引數變為乙個字串,##是把兩個巨集引數連線在一起,注意只能連線兩個巨集引數

9:什麼是聯合體:

在進行某些演算法的c語言程式設計的時候,需要使幾種不同型別的變數存放到同一段

記憶體單元

中。也就是使用覆蓋技術,幾個變數互相覆蓋。這種幾個不同的變數共同占用一段記憶體的結構,在c語言中,被稱作「

共用體」型別結構,簡稱共用體,也叫聯合體。

10:結構體與聯合體區別:

聯合體的各個成員共用記憶體,並應該同時只能有乙個成員得到這塊記憶體的使用權(即對記憶體的讀寫),而結構體各個成員各自擁有記憶體,各自使用互不干涉。所以,某種意義上來說,聯合體比結構體節約記憶體

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

1.未初始化的全域性變數 bss段 用來存放那些沒有初始化和初始化為零的全域性變數。2.初始化過的全域性變數 data 裡面存放那些初始化為非零的全域性變數。3.常量資料 rodata段 ro代表ready only,rodata就是用來存放常量資料的。在多個程序是共享的,這樣可以提高執行空間利用率...

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

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

預處理與結構體

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