c 記憶體管理常見面試題

2021-09-23 23:41:52 字數 1324 閱讀 7040

1、malloc/free和new/delete的區別

malloc和free和new/delete的共同點是:都是從堆上申請空間的,並且需要使用者手動釋放。

不同點:

1、malloc和free是函式,new和delete是操作符

2、malloc申請的 空間不會被初始化,new可以初始化

3、malloc申請空間時,需要手動計算空間大小並傳遞,new只需在後跟上空間的型別即可

4、malloc返回值是void*,使用時必須強轉,new不需要,new後跟的是型別

5、malloc申請空間失敗時,返回null,因此使用時必須判空,new不需要,但是需要捕獲異常

6、申請自定義型別物件時,malloc/free只會開闢空間,不會呼叫構造和析構,而new在申請空間後會呼叫建構函式完成物件的初始化,delete在釋放空間前會呼叫析構函式完成空間中資源的清理

7、new/delete比malloc和free的效率稍微低點,因為new/delete的底層封裝了malloc和free

2、設計乙個類,該類只能在堆上建立物件

思路:建構函式私有化

1、將類的建構函式私有,拷貝構造宣告成私有,防止別人呼叫拷貝在棧上生成物件

2、提供乙個靜態的成員函式,在該靜態成員函式中完成堆物件的建立

class heaponly

private:

heaponly()

heaponly(const heaponly&);

heaponly(const heaponly&) = delete;

};

3、設計乙個類,該類只能在棧上建立物件

思路:只能在棧上建立,即不能在堆上建立,因此只要將new的功能遮蔽掉即可,遮蔽掉operator new和定位new表示式

4、單例模式

乙個類只能建立乙個物件,該模式可以保證系統中該類只有乙個例項,並提供乙個訪問它的全域性訪問點

餓漢模式:

一上來就載入

懶漢模式

延遲載入,啟動快,控制多個單例的例項化順序

static single* gteinstance() mtx.unlock(); } return

5、記憶體洩漏

是指因為疏忽或錯誤造成程式未能釋放已經不再使用記憶體的情況,記憶體洩漏並不是指內存在物理上的消失,而是應用程式分配某段記憶體後,因為設計錯誤,失去了對該段記憶體的控制,因而造成記憶體的浪費

一般分為:堆記憶體洩漏、系統資源洩漏

動態記憶體管理常見面試題

學完c語言動態記憶體管理 和 c 動態記憶體管理我們就應該深入的去對比和了解兩個的特性。共同點 都是從堆上開闢空間,最後都需要手動釋放 不同點 malloc delete是標準庫函式,new delete是操作符 new建立物件時會呼叫建構函式 開空間 delete會呼叫析構函式,而malloc f...

C 常見面試題

1.c中static有什麼作用 1 隱藏。當我們同時編譯多個檔案時,所有未加static字首的全域性變數和函式都具有全域性可見性,故使用static在不同的檔案中定義同名函式和同名變數,而不必擔心命名衝突。2 static的第二個作用是保持變數內容的持久。儲存在靜態資料區的變數會在程式剛開始執行時就...

C常見面試題

1.bool型別,值為true或flase 正確答案 bool flag if flag if flag 以下均為不良風格 if flag true if flag 1 if flag false if flag 0 2.char 3.int int x if x 0 if x 0 4.float ...