VS2012中出现stack overflow的错误提示

一、问题描述与解决

在VS中进行图像检索时,由于构建了二维倒排索引表,又融合了四种不同的优化技术:软分配,突发权重,汉明嵌入,弱几何一致性,由于图像中每一个描述子对应一个128bits的二进制汉明标签,因此在较大的图像数据集上进行实验时,就会出现stack overflow的问题,开始怀疑两个地方出现问题:(1)内存不够,看一下任务管理器中CPU和内存的使用情况,发现内存足够使用,所以这种情况排除;(2)程序的问题,然后开始一行行的调试代码,没有发现任何异常,因此这种情况也排除。最后才偶然发现是由于VC++中默认的栈空间较小所致。因为VC++默认的栈空间是1M,我们可以将其设置的大一点(比如10M),就会避免上面的错误提示。虽然折腾了好几天,不过最后找到了问题的所在。

具体的更改栈空间大小的方法如下:“项目”→“属性”→“链接器”→“系统”:

将其中的“堆栈保留大小”设置为10M即可。

二、分析

       内存的读取速度显然较硬盘要快得多,当程序遇到大规模数据的频繁存取时,开辟内存空间显得尤为重要,一般来说,我们所使用的的内存有堆和栈之分,其他的我们很少控制,栈的速度较快,但是控件小,不灵活;而堆的控件几乎可以满足任何要求,而且灵活,但是相对于栈来说,速度要慢很多,并且在VC中堆是人为控制的,new了就要delete,否则很容易产生内存泄漏等问题。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
如何解决 Flutter 出现Stack Overflow 错误? Flutter Stack Overflow 错误通常是由于递归调用等无限循环引起的。解决此问题的方法之一是检查您的代码是否存在无限循环的情况,并尝试避免使用会导致无限递归的函数、方法或操作。另一个解决问题的方法是增加 Dart 的堆栈大小限制,可以通过在 main 函数的开头设置以下代码来实现: import 'dart:io'; void main() { // 设置堆栈大小为 4MB Platform.isWindows ? _setWindowsStackSize() : _setStackSize(); } void _setWindowsStackSize() { const int size = 4 * 1024 * 1024; dynamic args = <String>[ '/c', 'REG ADD "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\SubSystems" /v "Windows" /t REG_SZ /d "%SystemRoot%\system32\csrss.exe ObjectDirectory=\Windows SharedSection=1024,4096,2048,512,512,256,256,64,3072,180,1024 Windows=On SubSystemType=Windows" /f', '/d', '-', '/f', ]; final ProcessResult result = Process.runSync('cmd', args, runInShell: true, stdoutEncoding: SystemEncoding, stderrEncoding: SystemEncoding, inputEncoding: SystemEncoding); if (result.exitCode == 0) { args = <String>[ '/c', 'REG ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows" /v "ProcessCommandLine" /t REG_SZ /d "$env:windir\system32\csrss.exe -ObjectDirectory \Windows -SessionManager -Embedding 1024 4096 2048 512 512 256 256 64 3072 180 1024 -WindowsSubsys" /f', '/d', '-', '/f', ]; final ProcessResult result = Process.runSync('cmd', args, runInShell: true, stdoutEncoding: SystemEncoding, stderrEncoding: SystemEncoding, inputEncoding: SystemEncoding); } } void _setStackSize() { const int size = 4 * 1024 * 1024; StackOverflowError().stackTraceLimit = size ~/ 512; } 请注意,增加堆栈大小可能会影响应用程序的性能,因此请谨慎使用并进行适当的测试。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Linda Fan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值