1、 new&delete 和malloc&free的區別
一、基本概念
malloc/free:
1、函式原型及說明:
void *malloc(long numbytes):該函式分配了numbytes個位元組,並返回了指向這塊記憶體的指標。如果分配失敗,則返回乙個空指標(null)。
void free(void *firstbyte): 該函式是將之前用malloc分配的空間還給程式或者是作業系統,也就是釋放了這塊記憶體,讓它重新得到自由。
2.記憶體操作:
malloc函式的引數是接受需要分配的記憶體位元組數,如果記憶體能夠滿足請求量,那麼將會返回:指向被分配的記憶體塊起始位置
free函式釋放的是指標指向的記憶體(不是釋放的指標本身,不會刪除指標本身),其中指標必須指向所釋放記憶體空間的首位址
new/free:
1.操作時發生事件:
new的時候會有兩個事件發生:1).記憶體被分配(通過operator new 函式) 2).為被分配的記憶體呼叫乙個或多個建構函式構建物件
delete的時候,也有兩件事發生:1).為將被釋放的記憶體呼叫乙個或多個析構函式 2).釋放記憶體(通過operator delete 函式)
2.特殊應用:
使用delete是未加括號,delete便假設刪除物件是單一物件。否則便假設刪除物件是個陣列
因此,如果在呼叫new時使用了,則在呼叫delete時也使用,如果你在呼叫new的時候沒有,那麼也不應該在呼叫時使用。
二、malloc/free 和new/delete 的本質區別:
1.malloc/free是c/c++語言的標準庫函式,new/delete是c++的運算子
2.new能夠自動分配空間大小
3.對於使用者自定義的物件而言,用maloc/free無法滿足動態管理物件的要求。物件在建立的同時要自動執行建構函式,物件在消亡之前要自動執行析構函式。由於malloc/free是庫函式而不是運算子,不在編譯器控制許可權之內,不能夠把執行建構函式和析構函式的任務強加於malloc/free。因此c++需要乙個能對物件完成動態記憶體分配和初始化工作的運算子new,以及乙個能對物件完成清理與釋放記憶體工作的運算子delete---簡而言之 new/delete能進行對物件進行構造和析構函式的呼叫進而對記憶體進行更加詳細的工作,而malloc/free不能。
三、聯絡
既然new/delete的功能完全覆蓋了malloc/free,為什麼c++還保留malloc/free呢?因為c++程式經常要呼叫c函式,而c程式只能用malloc/free管理動態記憶體。如果用free釋放「new建立的動態物件」,那麼該物件因無法執行析構函式而可能導致程式出錯。如果用delete釋放「malloc申請的動態記憶體」,理論上講程式不會出錯,但是該程式的可讀性很差。所以new/delete,malloc/free必須配對使用。
參考:
2、 select 和pool的區別
3、 記憶體分配有幾種方式?請舉例說明
靜態儲存區 棧 堆 的記憶體分配
1,從靜態儲存區域分配記憶體。程式編譯的時候記憶體已經分配好了,並且在程式的整個執行期間都存在,例如全域性變數。
2,在棧上建立。在執行函式時,函式內區域性變數的儲存單元可以在棧上建立,函式結束時這些儲存單元自動被釋放。
處理器的指定集中有關於棧記憶體的分配運算,因此效率比較高,但是分配的記憶體容量有限。
3,在堆上分配記憶體,亦稱動態記憶體分配,程式在執行的時候用malloc函式或new運算子申請任意大小的記憶體,程式設計師
要用free函式或delete運算子釋放記憶體。動態記憶體使用非常靈活,但問題也很多。
答:四種:靜態區,bss,堆,棧
4、 解釋i-node
inode包含檔案的元資訊,具體來說有以下內容:
* 檔案的位元組數
* 檔案擁有者的user id
* 檔案的group id
* 檔案的讀、寫、執行許可權
* 檔案的時間戳,共有三個:ctime指inode上一次變動的時間,mtime指檔案內容上一次變動的時間,atime指檔案上一次開啟的時間。
* 鏈結數,即有多少檔名指向這個inode
* 檔案資料block的位置
可以用stat命令,檢視某個檔案的inode資訊:
見: 5、 udp快取多大
6、 執行緒&程序
7、 程序間通訊方式
8、 設計題:約10億qq使用者,每個使用者可以設定100字元以內的個人簽名,請設計乙個伺服器如何高效支援使用者對簽名的查詢,平均每秒有1000個使用者請求。
1、 面對乙個高中生,給他講講快速排序
3、給他推薦自己最喜歡的**、電影【暈死】
4、對簡歷的一些內容做些詢問
附加面試內容【每個問題討論的都比較細】:
1、現有具有關聯關係的資料,資料量很大超過幾百g,如何對資料進行檢索,如何設計乙個分布式檔案系統來做?為什麼會有同步問題?舉例說明。如何進行同步?如果系統的某個節點崩潰咋辦?如果主伺服器崩潰呢?
2、現有n多字串(n>10億),可能有不少重複出現的,如何管理這些字串?支援新增,更新,修改,刪除等功能。請自己實現乙個記憶體池,來輔助實現這個功能。
3、hash如何構建,hash函式
4、某公司要安排乙個年度聚會,公司人員按照管理層次來組織是乙個樹狀結構,每個人都為總裁準備了乙份一定價值的禮物,但是總裁不希望雇員和他的直接上司同時參加,設計乙個演算法,生成一張客人表,使得總裁收到的禮物總價值最大,並分析演算法複雜度。
5、鹽糖問題:倆桶,分別盛有鹽和唐,現有一小勺,挖一勺鹽放到盛有糖的桶裡(前題是不會溢位)攪勻,再挖一勺鹽糖混合物到盛鹽的桶裡,問:鹽桶中的糖多還是糖桶中的鹽多:-)
1週後收到hr面試,基本工資談了下薪水13w,工作性質還可以。
**:
騰訊一面總結
這次遇到的面試官直接拿著簡歷問上面的專案,然後基本上專案可以牽扯到的知識都會被問到。被問到的有 一。專案 1.專案的整體介紹,畫時序圖,我完成的部分是那些。2.被問到我沒有參與的部分,讓說一下如何進行分片。4.建立的連線是長連線還是短連線?二。os 1.多執行緒和多程序的區別 2.多程序的好處 3....
騰訊一面總結
面試官 有空了吧,我是你的 面試官,有空就做個自我介紹吧。我 巴拉巴拉 做了個自我介紹 聽著聲音都知道是大佬,膜拜t t 之後面試官問了我4道關於專案的問題。其實那專案是深度學習的專案,而且用了乙個寒假讀完了周志華的 機器學習 所以答起來並不是那麼難,比較開放性的問題。之後就開始進入正題了。面試官 ...
騰訊電話一面
1.實習經歷自我介紹 2.char指標多大,回答 char1,short2,int4,指標4,long4,longlong8,double8.強調了我知道64位一般指標是8,但是我自己在編譯器裡sizeof確實是這個結果。個人感覺應該給他講一下longlong和double的區別,因為也是前幾天變成...