C++棧溢出的解決方法總結


前言

很多C++入門者不太注重C++語言的內存管理機制,這樣開發的軟件會有持續運行過程中崩潰的危險,因此在學習過程中要特別注意內存大的管理。本篇博客對C++棧內存做梳理,在寫C++的過程中便可以注重規范。

1. 局部變量屬於棧內存!
2. 全局變量和statis變量位於全局區,程序結束后由系統釋放!
(不會棧溢出)

因此,防止棧溢出,要減少局部變量

即函數體和main函數內的變量不能多!(棧內存只有幾M)
一個int型局部變量占4個字節
一個double型局部變量占8個字節
1M=1048576個字節,最多
可定義 262144個int型局部變量
可定義 131072個double型局部變量

指針無論什么類型,在32位操作系統下占4個字節,在64位操作系統下占8個字節

棧溢出(stack overflow)的情況:

double numA[1000][1000];

000*1000=1000000個double型變量
這樣局部變量占用的內存過大,會超出棧內存范圍!

解決方法:將數組改成STL的vector


3. 若一個函數有很多局部變量,棧內存會一直占用,但是當一個函數return時,會釋放掉棧內存!

解決方法:為了防止棧溢出,可以將一個多局部變量的函數拆分為多個,用指針和STL來替代數據量大的變量


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM