VS2019写C++的警告C6262(请考虑将某些数据移到堆中)

警告 C6262:函数使用了堆栈中的 个字节: 超过了 /analyze:stacksize。请考虑将某些数据移到堆中

在解决该问题之前,需要明确哪些c++代码是堆区,哪些c++代码属于栈区,
首先,在C++程序中内存分为5个区:堆、栈、自由存储区、全局/静态存储区和常量存储区。

**栈:**是由编译器在需要时自动分配,不需要时自动清除的变量存储区。通常存放局部变量、函数参数等。
栈是一块连续的内存区域,大小是操作系统预定好的,windows下栈大小是默认固定的(但VC中可设置)。

:是由new分配的内存块,注意的是需要全程由程序猿手动操作,手动分配,手动释放,全都是人为意识,主管控制!!一个new[]与一个delete[]对应。如果没有释放掉,资源将由操作系统在程序结束后自动回收。
堆区的内存空间是不连续的,其大小受限于计算机系统中有效的虚拟内存(32bit 系统理论上是4G),所以堆的空间比较灵活,比较大。

自由存储区:是由malloc等分配的内存块,和堆十分相似,用free来释放。一般c中采用malloc函数,在c++里都直接使用new 和delete了。堆和自由存储区其实是同一块区域,new底层实现代码中调用了malloc,new可以看成是malloc智能化的高级版本
**全局/静态存储区:**全局变量和静态变量被分配到同一块内存中。
常量存储区:这是一块特殊存储区,里边存放常量,不允许修改。const int a =1;

此警告指出在函数内检测到了超出预设阈值的堆栈使用率。
默认情况下,当堆栈大小超过 16K 字节时会生成此警告。

修改方法
第一:**将一些数据移至堆,既然栈不够,那就不用栈,用其他。**其实就是使用malloc或是new在堆里开辟动态内存来代替堆栈内使用静态内存的目的。但是稍有不慎会有内存泄漏的问题。

第二:增加堆栈大小。

个人在程序编写过程总遇到的问题是一些二维数组使用太多,哎···········其实以前vs2015的时候好像也没提示过,不知道是预设还是啥,反正2015重装后卸载了,也没回去验证下。 对于二维数组的或者三维数组的,我们当然可以先使用malloc或者new,一般是new 来动态开辟内存,但是我不喜欢指针,也不喜欢new,

好在C++提供STL容器,我们完全可以把所有的一维二维三维数组直接转换成vector向量进行操作,个人感觉看起来顺眼,而且使用和赋值都比较方便,和普通数组没什么差距,vector通过resize进行内存的分配。

  • 23
    点赞
  • 74
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值