堆和棧的區(qū)別是? (1)存儲內(nèi)容不同 棧:在函數(shù)調(diào)用時,棧中存放的是函數(shù)中(最底下是函數(shù)調(diào)用后的下一條指令)的各個參數(shù)(局部變量)。 堆:一般是在堆的頭部用一個字節(jié)存放堆的大小。堆中的具體內(nèi)容由程序員分配。 (2)管理方式上不同 棧:由系統(tǒng)自動分配并釋放空間。 例如,聲明在函數(shù)中一個局部變量 int b; 系統(tǒng)自動在棧中為b開辟空間,當對應的生存周期結束后??臻g被自動釋放。 堆:需要程序員指定大小手動申請和手動釋放,在C語言中使用malloc函數(shù)申請,使用free函數(shù)釋放。 (3)空間大小不同 棧:獲取空間較小。在Windows下一般大小是1M或2M,當剩余??臻g不足時,分配失敗overflow。 堆:獲得空間根據(jù)系統(tǒng)的有效虛擬內(nèi)存有關,比較靈活、大。
面試官問的面試題: 題一,堆和棧的區(qū)別是?
題二,Volatile與Register的區(qū)別是?
題三,ARM里的大端格式和小端格式分別是什么意思?