阿里面試題整理集合

電面一面(規定控制在一個小時左右)】 程序員

一、malloc和new的區別: 數據結構

(1)malloc與free是C++/C語言的標準庫函數,new/delete是C++的運算符。它們都是程序運行中申請動態內存和釋放內存的。 函數

(2)對於非內部數據類型的對象而言,光用malloc/free沒法知足動態對象的要求。對象在建立的同時要自動執行構造函數,對象在消亡以前要自動執行析構函數。因爲malloc/free是庫函數而不是運算符,不在編譯器的控制權限以內,不可以把執行構造函數和析構函數的任務強加於malloc/free。所以C++語言須要一個能完成動態內存分配和初始化工做的運算符new,以一個能完成清理和釋放內存工做的delete,new/delete不是庫函數。 spa

(3)C++程序常常調用C函數,而C程序只能用malloc/free管理動態內存。 對象

二、 一個C/C++編譯的程序佔用的內存分爲如下幾個部分:


一、棧區(stack):程序運行時由編譯器自動分配,存放函數的參數值,局部變量值等,。其操做方式相似數據結構中的棧。程序結束時由編譯器自動釋放。 內存

二、堆區(heap):在內存中開闢的另外一塊存儲區域。通常由程序員分配釋放,若程序員不釋放,程序結束時可能由OS回收。注意它與數據結構中的堆是兩會事,分配方式倒相似於鏈表。 字符串

三、全局區(靜態區)(static):編譯器編譯時即分配的內存。全局變量和靜態變量的存儲時放在一塊的, 初始化的全局變量和靜態變量在一塊區域,未初始化的全局變量和靜態變量在相鄰的另外一塊區域。程序結束後由OS釋放。 編譯器

四、文字常量區:常量字符串放在這,程序結束後由系統釋放; 編譯

五、程序代碼區:存放函數體的二進制代碼 變量

三、序列化和反序列化,怎麼保證數據的正確性

相關文章
相關標籤/搜索