c 高頻面試題

2021-07-24 12:55:08 字數 1020 閱讀 3078

malloc/free是c語言的標準庫函式,new/delete是c++的運算子。 

由於malloc/free是庫函式而不是運算子,不在編譯器控制許可權之內。

對於使用者自定義的物件而言,用maloc/free無法滿足動態管理物件的要求。(廢話) 

new是型別安全的,malloc不是。int a=new float[2]是通不過編譯的,new 內建了sizeof、型別轉換和型別安全檢查功能。而malloc的返回型別是void*,malloc只負責申請空間。

對於非內部資料型別的物件而言,new 在建立動態物件的同時完成了初始化工作,malloc則沒有,calloc初始化,記憶體為0。對於內部資料型別需要加圓括號new才執行初始化工作。string屬於非內部資料型別。int arr=new int[10];沒有初始化,int arr=new int[10]();初始化為0。

new由兩步構成:1.operator new    2.呼叫建構函式      第一步相當於malloc的功能,但是operator new可以過載,可以自定義記憶體分配策略,甚至不做記憶體分配,甚至分配到非記憶體裝置上,malloc則無能為力。

可重入的函式一定是執行緒安全的,但反過來不一定成立。 

執行緒安全:乙個函式被稱為執行緒安全的,當且僅當被多個併發執行緒反覆呼叫時,它會一直產生正確的結果。 可重入:所謂「重入」,常見的情況是,程式執行到某個函式foo()時,收到訊號,於是暫停目前正在執行的函式,轉到訊號處理函式,而這個訊號處理函式的執行過程中,又恰恰也會進入到剛剛執行的函式foo(),這樣便發生了所謂的重入。此時如果foo()能夠正確的執行,而且處理完成後,之前暫停的foo()也能夠正確執行,則說明它是可重入的。 

要確保函式可重入,需滿足一下幾個條件:

1、不在函式內部使用靜態或全域性資料 

2、不返回靜態或全域性資料,所有資料都由函式的呼叫者提供。 

3、使用本地資料,或者通過製作全域性資料的本地拷貝來保護全域性資料。 

4、不呼叫不可重入函式。

已有總結

用mapreduce實現乙個矩陣和它的轉置相乘

C 高頻面試題

malloc free是c語言的標準庫函式,new delete是c 的運算子。由於malloc free是庫函式而不是運算子,不在編譯器控制許可權之內。對於使用者自定義的物件而言,用maloc free無法滿足動態管理物件的要求。廢話 new是型別安全的,malloc不是。int a new fl...

C 高頻面試題

字首式可以返回物件的引用,而字尾式必須返回物件的值所以導致在大物件產生時產生了較大的複製開銷,因此處理自定義型別的時候盡量使用字首式。a b b a a b 相對於c,c 多了過載 內聯函式 異常處理,擴充套件了物件導向的設計內容 類 繼承 虛函式 模板。c 並不是完全的物件導向,它也可以寫出面向過...

STL高頻面試題

vector的內部是使用動態陣列的方式來實現的,如果動態陣列的內部實現不夠用,就要動態的重新分配記憶體。然後把原陣列的內容拷貝過去。vector和陣列類似,擁有連續的記憶體空間,支援隨機的訪問,在中間進行元素的插入和刪除的操作時間複雜度是o n list是由雙向鍊錶實現的,只能通過陣列指標來進行資料...