記憶體管理及結構體的一些問題

2021-08-15 05:14:04 字數 1258 閱讀 4377

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

)和初始過的全域性變數

(.data)

的區別?

bss型別的全域性變數只佔執行時的記憶體空間,而不佔檔案空間;

data

段用來存放那些初始化為非零的全域性變數,既佔檔案空間,又佔執行空間。在整個程式的執行週期內,

data

資料是一直存在的。

2.常量資料(.rodata)的問題?

常量不一定就放在rodata裡,有的立即數直接和指令編碼在一起,存放在**段

(.text)中。

字串會被編譯器自動放到rodata中,其他資料要放到

rodata

中,只要加

const

關鍵字就修飾好了。

3.棧(stack)的作用?

用來存放臨時變數和函式引數。可以用來實現函式的呼叫。

4.堆malloc:用來分配一塊指定大小的記憶體

realloc:用來調整

/重分配一塊存在的記憶體

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

5.使用堆記憶體的注意點

·malloc/free

要配對使用

·每個區間都有四個屬性

6.野指標的成因?

·指標變數沒有初始化

·指標p

被free

或delete

之後,沒有置為

null

,讓人誤以為

p是個合法的指標

7.常見的記憶體錯誤

(1)記憶體分配未成功,卻使用了它

(2)記憶體分配雖然成功,但尚未初始化就引用它

(3)記憶體分配成功並且已經初始化,但操作越過了記憶體的邊界

(4)忘記了釋放記憶體,造成記憶體洩漏

(5)釋放了記憶體,卻繼續使用它

8.什麼是段錯誤?

段錯誤就是指訪問的記憶體超出了系統所給這個程式的記憶體空間,即訪問了錯誤的記憶體段。

9.結構體和聯合體的區別?

struct和

union

都是由多個不同的資料型別成員組成的,但在任何同一時刻,

union

中只存放了乙個被選中的成員,而

struct

的所有成員都存在。

乙個struct變數的總長度等於所有成員長度之和,

union

變數的長度等於最長的成員的長度。

10.什麼是預處理?

預處理是指在進行編譯的第一遍掃瞄之前所做的工作。巨集定義、檔案包含、條件編譯等都在預處理階段。

關於結構體的一些問題

關於結構體的一些問題 1 什麼是結構體?2 一般在什麼情況下用到結構體?3 什麼是結構體內存對齊?為什麼要對齊?怎樣對齊?4 對齊引數如何設定?可以設定為按照任意位元組數對齊嗎?答 1 結構體是構造型別的一種,是一種根據自身需要,由基本資料型別組成的新的資料型別。2 在函式中需要返回多個值時,可以通...

關於記憶體溢位的一些問題

不知道是否理解正確,還請高手多加指點,這是我今天再修改程式的時候碰到的一些問題,在我修改的軟體當中正是通過類似 sum函 數的指標返回值,程式編譯沒有錯誤,在我反覆試驗軟體的功能時候出現了指標錯誤,後來修改了函式,讓其不通過指標返回值,這才得以不出現指標錯誤,但在內 存溢位檢測過程中,發現軟體當中的...

管理的一些問題換位思考

博弈中的管理 1 不按時發薪水極大挫敗員工的積極性,從而導致的消極怠工問題產生。晚幾天能產生多少利息。要會取捨。2 做越多錯越多責任越多好處越少,員工要花本該用於做事的精力來找理由藉口推卸責任。不能讓老黃牛吃虧。3 員工流失,不要抱怨員工,而是該想想你哪沒做好。是不是更多的考慮了自己的利益,而沒有為...