杭州嵌入式培訓
達內杭州嵌入式培訓中心

13732203138

熱門課程

C++基礎面試題集錦

  • 時間:2019-08-06 11:41
  • 發布:轉載
  • 來源:凱文趣味編程

本文為大家分享的是C++基礎面試題,有興趣的小伙伴們快看過來吧。

1、 一個C++源文件從文本到可執行文件經歷的過程

對于C/C++編寫的程序,從源代碼到可執行文件,一般經過下面四個步驟:

1).預處理,產生.ii文件

2).編譯,產生匯編文件(.s文件)

3).匯編,產生目標文件(.o或.obj文件)

4).鏈接,產生可執行文件(.out或.exe文件)

2、#include 的順序以及尖叫括號和雙引號的區別

1. #include的順序的區別:

頭文件的引用順序對于程序的編譯還是有一定影響的。如果要在文件a.h中聲明一個在文件b.h中定義的變量,而不引用b.h。那么要在a.c文件中引用b.h文件,并且要先引用b.h,后引用a.h,否則匯報變量類型未聲明錯誤,也就是常見的某行少個“;”符號。

2. #include尖括號和雙引號的區別:

1)#include <> ,認為該頭文件是標準頭文件。編譯器將會在預定義的位置集查找該頭文件,這些預定義的位置可以通過設置查找路徑環境變量或者通過命令行選項來修改。使用的查找方式因編譯器的不同而差別迥異。

2)#include "",認為它是非系統頭文件,非系統頭文件的查找通常開始于源文件所在的路徑。查找范圍大于<>。

3、進程和線程,為什么要有線程

1、和進程相比,它是一種非常"節儉"的多任務操作方式。在linux系統下,啟動一個新的進程必須分配給它獨立的地址空間,建立眾多的數據表來維護它的代碼段、堆棧段和數據段,這是一種"昂貴"的多任務工作方式。(資源)

2、運行于一個進程中的多個線程,它們之間使用相同的地址空間,而且線程間彼此切換所需時間也遠遠小于進程間切換所需要的時間。據統計,一個進程的開銷大約是一個線程開銷的30倍左右。(切換效率)

3、線程間方便的通信機制。對不同進程來說,它們具有獨立的數據空間,要進行數據的傳遞只能通過進程間通信的方式進行,這種方式不僅費時,而且很不方便。線程則不然,由于同一進城下的線程之間貢獻數據空間,所以一個線程的數據可以直接為其他線程所用,這不僅快捷,而且方便。(通信)

除以上優點外,多線程程序作為一種多任務、并發的工作方式,還有如下優點:

1、使多CPU系統更加有效。操作系統會保證當線程數不大于CPU數目時,不同的線程運行于不同的CPU上。(CPU設計保證)

2、改善程序結構。一個既長又復雜的進程可以考慮分為多個線程,成為幾個獨立或半獨立的運行部分,這樣的程序才會利于理解和修改。(代碼易維護)

4、C++11有哪些新特性?

1)關鍵字及新語法:auto、nullptr、for

2)STL容器:std::array、std::forward_list、std::unordered_map、std::unordered_set

3)多線程:std::thread、std::atomic、std::condition_variable

4)智能指針內存管理:std::shared_ptr、std::weak_ptr

5)其他:std::function、std::bind和lamda表達式

5、malloc的原理,brk系統調用干什么的,mmap呢?

malloc的實現方案:

1)malloc 函數的實質是它有一個將可用的內存塊連接為一個長長的列表的所謂空閑鏈表。

2)調用 malloc()函數時,它沿著連接表尋找一個大到足以滿足用戶請求所需要的內存塊。然后,將該內存塊一分為二(一塊的大小與用戶申請的大小相等,另一塊的大小就是剩下來的字節)。接下來,將分配給用戶的那塊內存存儲區域傳給用戶,并將剩下的那塊(如果有的話)返回到連接表上。

3)調用 free 函數時,它將用戶釋放的內存塊連接到空閑鏈表上。

4)到最后,空閑鏈會被切成很多的小內存片段,如果這時用戶申請一個大的內存片段, 那么空閑鏈表上可能沒有可以滿足用戶要求的片段了。于是,malloc()函數請求延時,并開始在空閑鏈表上檢查各內存片段,對它們進行內存整理,將相鄰的小空閑塊合并成較大的內存塊。

brk和mmap:

從操作系統角度來看,進程分配內存有兩種方式,分別由兩個系統調用完成:brk和mmap(不考慮共享內存)。

1、brk是將數據段(.data)的最高地址指針_edata往高地址推;

2、mmap是在進程的虛擬地址空間中(堆和棧中間,稱為文件映射區域的地方)找一塊空閑的虛擬內存。

這兩種方式分配的都是虛擬內存,沒有分配物理內存。在第一次訪問已分配的虛擬地址空間的時候,發生缺頁中斷,操作系統負責分配物理內存,然后建立虛擬內存和物理內存之間的映射關系。

在標準C庫中,提供了malloc/free函數分配釋放內存,這兩個函數底層是由brk,mmap,munmap這些系統調用實現的。

以上就是本文為大家分享的面試題,希望對c的小伙伴們有所幫助。

預約申請免費試聽課

怕錢不夠?就業掙錢后再付學費!    怕學不會?從入學起,達內定制課程!     擔心就業?達內多家實踐企業供你挑選!

上一篇:如何在簡歷中揚長避短?干貨
下一篇:你的簡歷有這常見的7大問題嗎?求職速看

設計師離職被老板加薪留人,該如何是好??

面試過程中面試官無法忍受哪些情況

面試中如何回答你有什么缺點的問題?

你的簡歷有這常見的7大問題嗎?求職速看

選擇城市和中心
江西省

貴州省

廣西省

海南省

中文字幕人成乱码在线观看