第一次面試的題

渣渣馬發表於2020-12-13

舉例說明static的三種用途對應的解釋

  • 隱藏。當我們同時編譯多個檔案時,所有未加static的全域性變數和函式都具有全域性可見性。為了防止出錯,需加上static。
  • 保持變數的內容持久。.儲存在資料區的變數,和全域性便量具有相同的性質:生命週期和程式一樣長,不會被釋放,唯一不同的是變數的作用域有一定的區別。
  • 預設初始換為0.當變數未初始化時,加上static可以讓系統自動給該變數一個0的值。

舉例說明關鍵字volatile的三種作用:對應解釋(易變得)

  • 在C語言有關書上寫的有關volatile。簡單的說:volatile關鍵字會影響編譯器編譯的結果,用volatile宣告的變數表示該變數隨時都可以發生變化,該變數的有關運算,不要進行編譯優化,以免出錯。
  • 1)中斷服務程式中修改的供其它程式檢測的變數,需要加volatile;
  • 2)多工環境下多工間共享的標誌,應加volatile;
  • 3)儲存器對映的硬體暫存器通常也要加volatile說明,因為每次對它的讀寫都可能由不同意義;

堆與棧有何區別? 對應的大佬解釋

  • 1)資料結構的堆與棧
    ①棧是一種可以實現“先進後出”(或者稱為“後進先出”)的儲存結構。
    ②堆則是一種經過排序的樹形資料結構,常用來實現優先佇列等。堆是一種特殊的完全二叉樹。 其中,節點是從左到右填滿的,並且最後一層的樹葉都在最左邊(即如果一個節點沒有左兒子,那麼它一定沒有右兒子);每個節點的值都小於(或者都大於)其子節點的值。
  • 2)記憶體內容分配的堆與棧
    ①分配與釋放方式不同
    ⑴棧記憶體是由編譯器自動分配與釋放的,它有兩種分配方式:靜態分配和動態分配。
    ⑵堆記憶體完全是由程式設計師手動申請與釋放的。(malloc函式等)
    ②分配碎片的問題
    ⑴對堆來說,記憶體空間的不連續。 頻繁分配和釋放(malloc / free)不同大小的堆空間勢必會造成,從而造成大量碎片,導致程式效率降低;
    ⑵對棧來講,記憶體空間是連續,則不會存在這個問題。
    ③分配的效率
    ⑴棧是機器系統提供的資料結構,計算機會在底層對棧提供支援。棧的分配效率要高一些。
    ⑵堆則不同,它是由 C/C++ 函式庫提供的,它的機制也相當複雜。堆的分配效率要低一些。
    ④申請的大小限制 : 堆的生長方向
    ⑴堆記憶體的申請大小受限於計算機系統中有效的虛擬記憶體。棧的增長方向是由高地址向低地址方向增長。
    ⑵棧則不同,它是一塊連續的記憶體區域,其地址的增長方向是向下進行的,向記憶體地址減小的方向增長。
    ⑤儲存的內容
    ⑴對棧而言,一般用於存放函式的引數與區域性變數等。
    ⑵對堆而言,具體儲存內容由程式設計師根據需要決定儲存資料。
    Little Endian和Big Endian有何區別? 對應的解
    大端模式(big endian):資料的高位位元組儲存在記憶體的低地址中,而低位位元組儲存在記憶體的高地址中。
    小端模式(little endian):資料的高位位元組儲存在記憶體的高地址中,而低位位元組儲存在記憶體的低地址中。

相關文章