1.c/c++記憶體有哪幾種型別?
c中,記憶體分為5個區,堆,棧,程式**區,全域性/靜態儲存區和常量儲存區。此外,c++中有自由儲存區一說。
全域性變數和static變數會初始化為零,而堆和棧上變數是隨機的不是確定的。
2.c/c++堆和棧的區別?
①堆存放動態分配的物件------程式執行時分配的物件,比如區域性變數,其生存期由程式控制;
②棧用來儲存定義在函式內的非static物件,僅在其定義的程式塊執行時才存在;
③靜態記憶體用來儲存static物件,類static資料成員以及定義在任何函式外部的變數,static物件在使用之前分配,程式結束時銷毀;
④棧和靜態記憶體的物件由編譯器自動建立和銷毀。
3. 堆和自由儲存區的區別?
①堆是c語言和作業系統的術語,是作業系統維護的一塊動態分配記憶體;自由儲存區是c++中通過new與delete動態分配和釋放物件的抽象概念
②操作上,堆使用malloc()申請,free()釋放;自由儲存區用new動態分配建立物件和delete釋放物件的抽象概念,通過new來申請的記憶體區域可稱為自由儲存區。new可以通過封裝malloc來實現。
4.程式的編譯過程?
5.函式呼叫的過程?
int
main
(void
)
呼叫fun()的過程如下:
①引數壓棧,順序是c->b->a
②儲存d = fun(…)的下一條指令的位址,即cout<6.什麼是左值,右值?
①左值能夠出現在等號左邊也能出現在等值右邊的變數(或表示式),右值指的是只能出現在等號右邊的變數(或表示式)。
比如說,malloc返回的就是乙個右值,或者左值在程式中能夠尋值,右值是乙個具體得真實的值或物件,沒法取到它的位址,因此無法對右值賦值。
7.const關鍵字
①定義時必須初始化
②指標可以是const的形參,也可以是指向const物件的指標
③定義為const的形參,在函式體內不能被修改
④const的成員函式可以被const或非const物件呼叫,但是普通成員函式(無const修飾)只能被普通物件呼叫。
⑤const修飾成員變數時,不能在宣告時初始化,必須在建構函式的列表裡初始化
8.static關鍵字(只要背前四條)
①在函式中,乙個static的變數在此函式被呼叫過程中維持其值不變
②在模組中(不在函式中),乙個static變數可以被模組中所有函式訪問,但不可以被模組外的其他函式訪問。
③類中的static成員變數屬於整個類,不能在類內進行定義,只能在類的作用域中進行定義
④類中的static成員函式屬於整個類,不包含this指標,只能用類名呼叫static成員函式
⑤static全域性變數只能在本檔案中使用,限制了它的作用域;而普通全域性變數可以在其他檔案中使用。
⑥static區域性變數必須初始化,普通區域性變數不需要;前者所在的函式被多次呼叫時,依據上一次的結果進行計算,而後者所在的函式被呼叫時,還是原來的值。雖然靜態區域性變數在函式呼叫結束後仍然存在,但其他函式不能引用它。
⑦static函式限定在本檔案中使用,雖然其他檔案可以知道它的存在,但不能使用;而普通函式預設是extern的,其他檔案也可以使用。static函式有兩個好處:一是其他檔案可以定義相同名字的函式,不會衝突;二是靜態函式不能為其他函式使用。
9.extern關鍵字
①extern c,表示該段**以c語言進行編譯。
②extern 放在變數或函式前,說明該變數或函式定義在別的檔案中,提示編譯器取其他模組中取定義,相當於前向宣告;
10.指標和引用的區別
①引用是直接訪問,指標是間接訪問
②引用是變數的別名,本身不單獨分配自己的記憶體空間,而指標有自己的記憶體空間
③引用繫結記憶體空間(必須賦值),是乙個變數別名不能更改繫結,可以改變物件的值。
總的來說,引用既有指標的效率,又具有變數使用的方便性和直觀性
引用不可以為空,是別名,就好比別人的外號,這個人都不存在,外號就沒意義了。
而指標,指標指向的是記憶體中的單元,指標可以為空,指標指向為null,實則指標是指向記憶體為0的地方,表明指標沒有指向任何地方。
11.指標常量和常量指標區別
參考部落格:
C 和C語言面試問題彙總
1 const知道嗎?解釋一下其作用 const修飾類的成員變數,表示常量不可能被修改 const修飾類的成員函式,表示該函式不會修改類中的資料成員,不會呼叫其他非const的成員函式 const函式只能呼叫const函式,非const函式可以呼叫const函式 2 虛函式是怎麼實現的 每乙個含有虛...
spark面試問題彙總(持續更新 )
spark submit的時候如何引入外部jar包 spark shuffle的具體過程,你知道幾種shuffle方式 spark 如何防止記憶體溢位 cache和pesist的區別 怎麼處理資料傾斜 簡要描述spark分布式集群搭建的步驟 spark使用 1 當前檔案a.text的格式為,請統計每...
面試問題c
1 如何避免記憶體洩漏 2 namespace 3 如何防止記憶體洩漏 4 堆和棧的區別 5 記憶體的幾種形式 6 linux指令 1 如何避免記憶體洩漏 答 記憶體洩漏 記憶體洩漏是指由於未能釋放掉不再使用的記憶體情況,並不是指內存在物理上的消失,而是應用程式分配某段記憶體後,由於設計錯誤失去了對...