vs2017堆栈大小更改[vs2010修改堆栈大小]

您所在的位置:网站首页 vs2022堆栈 vs2017堆栈大小更改[vs2010修改堆栈大小]

vs2017堆栈大小更改[vs2010修改堆栈大小]

2023-04-05 09:58| 来源: 网络整理| 查看: 265

C++如何手动更改系统堆栈大小?

看看是否对你有帮助:

/STACK 选项设置堆栈的大小(以字节为单位)。此选项仅在生成 .exe 文件时使用。

reserve 值指定虚拟内存中的总的堆栈分配。对于 x86 和 x64 计算机,默认堆栈大小为 1 MB。在 Itanium 芯片组上,默认大小为 4 MB。

commit 取决于操作系统所作的解释。在 Windows NT 和 Windows 2000 中,它指定一次分配的物理内存量。提交的虚拟内存导致空间被保留在页面文件中。更高的 commit 值在应用程序需要更多堆栈空间时可节省时间,但会增加内存需求并有可能延长启动时间。对于 x86 和 x64 计算机,默认提交值为 4 KB。在 Itanium 芯片组上,默认值为 16 KB。

以十进制或 C 语言表示法指定 reserve 值和 commit 值。

设置堆栈大小的另一种方法是使用模块定义 (.def) 文件中的 STACKSIZE 语句。如果两者都指定,则 STACKSIZE 重写堆栈分配 (/STACK) 选项。可以使用 EDITBIN 工具在生成 .exe 文件之后更改堆栈大小。

在 Visual Studio 开发环境中设置此链接器选项

打开此项目的“属性页”对话框。有关详细信息,请参见设置 Visual C++ 项目属性。

单击“链接器”文件夹。

单击“系统”属性页。

修改下列任一属性:

堆栈提交大小

堆栈保留大小

[img]如何根据需要定义堆栈段的大小?

堆栈的定义是这样的:

dssg

segment

stack

aa

dw

512dup(?)

dssg

ends

一般的说,当PUSH/POP指令不频繁时用系统堆栈就可以了,但是当需要堆栈存储大量数据,如作为子程序传替参数时就要定义一个堆栈,而且一般来说一个段的内容不能超过64K,因为偏移地址最大只能表示64K,所以定义的堆栈也不能是无限大,如果超过了64K,就定义两个吧!

堆栈在汇编中对于初学者用的很少,一般小程序都不需要用的!用起来也不是很难,就是注意下,在子程序调用时,什么时候是返回地址,什么时候是寄存器值!总之,记住先进后出,再做题时画个堆栈图,应该不会很难的!

一个函数产生的堆栈大小和什么有关

和操作系统有关系

不同的操作系统对于栈的默认大小是有规定的。对于Linux系统,默认的栈空间是10M。对于Windows系统,默认的空间是1M。但是栈的空间是可以调整的,在编译器的编译属性更改

visual studio 编译器的堆空间不足问题的解决(cmake版本)

我们有个自动编译游戏引擎的脚本,这个脚本时间用久了,总是会报如下的错误:

fatal error C1060: 编译器的堆空间不足

每次出现这种错误,总是要请人重启机器,重新配置,很耽误时间和精力。

所以本人就在努力寻找一个彻底的解决办法。

想直接要解决方法的朋友可以跳过接下来的两节。

简单网上搜一下,就能搜到参考文献1。

如果你的c++工程不用cmake,参考文献1的方法足以满足你的需求。

但是我们工程比较大,肯定是要用cmake的,所以我就开始尝试各种方法: 通过改工程的cmake文件的方式来让cmake生成的vcxproj工程文件中包含PreferredToolArchitecture属性。

网上找了好久,试了不少办法,还是没用。

发现最终解决方案也是个很有趣的过程,值得记录。

首先我看见PreferredToolArchitecture父节点是PropertyGroup,而PropertyGroup下面有Platform属性,PreferredToolArchitecture和Platform是兄弟属性。

我们的Platform用x64还是win32,都是在cmake命令行里指定的。

所以我就大胆猜测,PreferredToolArchitecture这个属性如果可以通过cmake设置的话,大概率也是在cmake的命令行中设置!

接着,就是小心求证的过程,先执行: cmake --help

通过阅读帮助文档,辅以简单的排除法,我觉得toolset-name这个属性很可能是我要的,于是谷歌: cmake toolset name

从而找到了文档2,在文档2中发现了host=x64这个东西,但是我还不知道怎么用!于是继续搜索:cmake host=x64

找到了文档3,然后修改我们的编译脚本,加入这个编译选项,重新cmake,果然,出现了vcxproj文件中看到了PreferredToolArchitecture x64属性!

感觉成功了90%,编译工程,打开任务管理器,观察进程名称,发现c++编译器都是64位的,遂大功告成。

问题的本质就是windows操作系统visual studio的默认cpp编译器是32位的,所以最大内存是4G,就容易导致编译器内存不足。

有问题的cmake指令如下:

使用64位的cpp编译器的解决方法如下:

注意: cmake的GUI并没有-T host的选择,当然最新版的GUI可能也会加这个。。

还有另一种方法,添加环境变量: set PreferredToolArchitecture=x64

虽然用了64位的cpp编译器,过了一段时间,还是报堆空间不足的问题。

据观察,物理内存占用率100%,所以考虑利用空闲的磁盘空间,增大机器的虚拟内存。

win10如何设置虚拟内存的大小:

物理内存只有32G,以前的虚拟内存是6G,我利用空闲磁盘,增大虚拟内存到100G!

vs c#设置调用堆栈大小

好比你拖一个文本框进去.系统会自动在堆栈中创建指针(栈)和内存空间大小(堆).比如3KB.但你想把这个大小改为100KB.我只能告诉你,你控制不了.

vs2017堆栈大小更改的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于vs2010修改堆栈大小、vs2017堆栈大小更改的信息别忘了在本站进行查找喔。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3