java異常體系 C語言調(diào)用函數(shù)時(shí),什么情況會(huì)出現(xiàn)棧溢出,棧溢出會(huì)出現(xiàn)什么結(jié)果?
C語言調(diào)用函數(shù)時(shí),什么情況會(huì)出現(xiàn)棧溢出,棧溢出會(huì)出現(xiàn)什么結(jié)果?調(diào)用函數(shù)的形式參數(shù)是否太多?一般來說,函數(shù)的參數(shù)存儲(chǔ)在堆棧中。當(dāng)然,也可以應(yīng)用于堆。如果形式參數(shù)太多,則會(huì)發(fā)生堆棧溢出,并且會(huì)更頻繁地發(fā)生
C語言調(diào)用函數(shù)時(shí),什么情況會(huì)出現(xiàn)棧溢出,棧溢出會(huì)出現(xiàn)什么結(jié)果?
調(diào)用函數(shù)的形式參數(shù)是否太多?一般來說,函數(shù)的參數(shù)存儲(chǔ)在堆棧中。當(dāng)然,也可以應(yīng)用于堆。如果形式參數(shù)太多,則會(huì)發(fā)生堆棧溢出,并且會(huì)更頻繁地發(fā)生遞歸。堆棧溢出將導(dǎo)致段錯(cuò)誤,這可能會(huì)占用系統(tǒng)的堆棧(就好像無法訪問它一樣)。。。錯(cuò)了,告訴我
1。在死循環(huán)中定義局部變量會(huì)導(dǎo)致堆棧溢出,例如以下定義:
while(true){
int x=1;
int arr[]=New int[10];
}]因?yàn)槎褩?臻g存儲(chǔ)局部變量、參數(shù)和其他對(duì)象,所以堆棧有一個(gè)默認(rèn)深度,我記得是128M(內(nèi)存問題,請(qǐng)指出)如果錯(cuò)誤)。
2. 在啟動(dòng)循環(huán)中定義對(duì)象會(huì)導(dǎo)致堆內(nèi)存溢出,如以下定義:
(true){
person P=new person()
}
對(duì)象的生成會(huì)占用時(shí)間和空間,因?yàn)閮?nèi)存空間有限,遲早會(huì)導(dǎo)致堆內(nèi)存溢出。
所以我們寫代碼是為了養(yǎng)成一個(gè)好習(xí)慣,不在特殊情況下,不在循環(huán)中定義局部變量和對(duì)象。