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)的情况:
1 | double numA[1000][1000]; |
000*1000=1000000个double型变量
这样局部变量占用的内存过大,会超出栈内存范围!
解决方法:将数组改成STL的vector
3. 若一个函数有很多局部变量,栈内存会一直占用,但是当一个函数return时,会释放掉栈内存!
解决方法:为了防止栈溢出,可以将一个多局部变量的函数拆分为多个,用指针和STL来替代数据量大的变量
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧