C6262警告和Visual Studio的栈大小设置

这篇具有很好参考价值的文章主要介绍了C6262警告和Visual Studio的栈大小设置。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

(一)遇到的问题

静态数组空间往往和栈有关,近期看算法书,为了提升效率,常常直接一个静态数组来实现里面的算法——栈(stack)由系统或编译器分配,性能要优于人工分配的堆(heap)。那么,好东西必然要少,所以默认栈的大小是有限制的。网上的说法多是Linux默认8MB,Windows 2MB或1MB,事实上我们使用静态数组的时候会小于这个值,因为栈里还有其它内容。

正好机器有Visual Studio 2022,尝试了一下不同情况下静态数组的定义:

1 Release模式

Visual Studio的Release模式下,数组放在函数里面或者全局区域,都是可以超过上述的限定的,似乎没有太大的数组大小限制,比如4*64=256MB,并没有提示说超过特定长度。

#define MAX_SIZE 1024 * 1024 * 64
int a[MAX_SIZE];

2 Debug模式

Debug模式下会出现两种情况,一是数组变量在全局声明,二是数组变量在函数内声明。

(1)静态数组为全局变量

大小可以突破默认保留栈大小的限制,可以使用较大的存储空间,测试代码如下:

#define MAX_SIZE 1024 * 1024 * 64
#include <stdio.h>

int a[MAX_SIZE];

int main()
{
  a[33554432] = 666;
  printf("%d\n", a[1024]);
  printf("%d\n", a[33554432]);
  return 0;
}

(2)静态数组为函数中的局部变量

当静态数组在函数中声明时,会提示超出保留栈(编译器默认制定了16384字节的栈空间,也就是16KB)大小,并建议使用堆存储,如动态数组:

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

测试代码如下:

void test_stack_overflow()
{
  int a[MAX_SIZE];
  a[33554432] = 666;
  printf("%d\n", a[1024]);
  printf("%d\n", a[33554432]);
}

VS提示如下图:

C6262警告和Visual Studio的栈大小设置

 (二)解决办法

在项目属性中修改“配置属性->链接器->系统->堆栈保留大小”选项,即可在debug模式下,解决作为静态变量的局部数组栈溢出问题。

C6262警告和Visual Studio的栈大小设置

这是对链接器中的/STACK选项进行设置,那么改变堆栈保留大小,则可以出现下面两图的情况:

C6262警告和Visual Studio的栈大小设置

 C6262警告和Visual Studio的栈大小设置

 (三)小结

这是自己公众号上之前发的文章,由此可见,VS的保留栈大小问题跟链接器选项是密切相关的,当链接器处于/RELEASE模式下时,可以获得较大保留栈空间(实际有多大尚待验证),当链接器处于/DEBUG模式下时,对保留栈限制较大,需要在链接器选项中进行设置。文章来源地址https://www.toymoban.com/news/detail-444244.html

到了这里,关于C6262警告和Visual Studio的栈大小设置的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C#扩展——Visual Studio 代码提示/智能提示字体大小更改方法.

    声明:本文为个人笔记,用于学习研究使用非商用,内容为个人研究及综合整理所得,若有违规,请联系,违规必改。 VS2019 在副屏上,输入部分后智能提示/代码提示字体太小了,看不清.想尝试调整字体,但在字体中一直找不到对应选项. 实现原理: 将菜单栏 工具——选项

    2024年02月11日
    浏览(46)
  • 当Visual Studio遇到 “当前不会命中断点.还没有为该文档加载任何符号“的情况

    1.配置项目调试路径:  2.问题解决方案: VS配置调试路径不是默认路径时,需要看生成的文件是否在配置路径内,如果不在的话,可能发生\\\"当前不会命中断点.还没有为该文档加载任何符号\\\"的情况; 右键项目属性--生成事件 查看生成事件中的“后期生成事件命令行(O):”路径

    2024年02月12日
    浏览(38)
  • Visual Studio 设置快捷代码段

    什么是快捷代码段: 例如: 只需要输入mst后按一下TAB就会自动生成代码memset(str, 0, sizeof(str));,只需要输入Pow就可以自动生成一个快速幂函数等等,非常方便快捷,一定程度提高了编写代码的效率   Visual Studio 设置自定义代码段方法: ①新建文件XXX.snippet,其中的\\\"XXX\\\"就是上

    2024年02月08日
    浏览(56)
  • visual studio 2019恢复默认设置

    在使用microsoft visual studio的过程中,经常由于自己的一些sao操作,把窗口、字体、快捷键搞乱,怎么将microsoft visual studio恢复默认设置呢?其实很简单,那么今天小编就和大家一起分享将microsoft visual studio恢复默认设置的方法, 我们在使用 Visual Studio 的时候,常常有一些窗口不

    2024年02月03日
    浏览(55)
  • Visual Studio Code常用设置

    此处用于记录下本人所使用 VScode 的使用习惯。其中主要包括:界面,主题,光标,文件保存等选项。 基本原理 : Visual Studio Code 会在 windows 的 C 盘中生成一系列配置文件,软件工作时调用该文件所定义的函数执行对应功能。 该文件位于: C盘中的 C:Users20220601-MJAppDataRoa

    2024年01月16日
    浏览(107)
  • Visual Studio 主题和背景设置

    平日里敲代码的过程难免会有点枯燥,,但是一个舒适、好看的编译器界面会让你的工作更加愉悦。本篇博客将介绍如何设置vs的主题和背景。 首先我们在编译器最上方的的一栏中找到工具。 然后再选项中寻找主题。 我们可以看到提供了四种主题,我们可以从中挑选自己喜

    2024年02月05日
    浏览(67)
  • visual studio设置主题和背景颜色

        visual studio2019默认的主题有4种,分别是浅白色、深黑色、蓝色、蓝(额外对比度),背景颜色默认是纯白色RGB(255,255,255)。字体纯白色看久了,眼睛会感到酸痛、疲劳,建议改成浅白RGB(250,250,250)、豆沙绿RGB(85,123,105)、透明蓝白色RGB(248,249,253)、炫酷黑RGB(30,30,30)或RGB(50,50,50)等

    2024年02月05日
    浏览(67)
  • Visual Studio终于可以设置行间距了

    随着Microsoft Visual Studio 2022 (64 位) 版本 17.0.4的发布, Visual Studio终于可以设置行间距了! 工具 → 选项 → 文本编辑器 → 常规 → 行距 :

    2024年02月11日
    浏览(51)
  • Visual Studio Code设置中文的方法

    visual studio Code这是一款编程软件,可以进行c语言文件的编辑操作,很多编程专业的小伙伴经常会使用该软件进行编辑,Visual Studio Code的功能非常的强大,该软件提供很多个版本,有些版本之间可能有的功能有些差异,越是新版,功能越是更加的丰富,但是我们下载的Visual

    2024年02月04日
    浏览(66)
  • Visual Studio 新建文件增加默认代码设置

    新建一个新的空项目时,设置自动加入代码 #define _CRT_SECURE_NO_WARNINGS 具体方法如下   1、找到当前使用的Visual Studio文件目录(以Visual Studio2022为例) 2、找到文件目录后,若不知道在哪个文件夹中可以点击“Microsoft Visual Studio”中的“2022”文件夹,在这里搜索“newc++file.cpp”文

    2024年02月11日
    浏览(57)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包