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