一、问题描述与解决
在VS中进行图像检索时,由于构建了二维倒排索引表,又融合了四种不同的优化技术:软分配,突发权重,汉明嵌入,弱几何一致性,由于图像中每一个描述子对应一个128bits的二进制汉明标签,因此在较大的图像数据集上进行实验时,就会出现stack overflow的问题,开始怀疑两个地方出现问题:(1)内存不够,看一下任务管理器中CPU和内存的使用情况,发现内存足够使用,所以这种情况排除;(2)程序的问题,然后开始一行行的调试代码,没有发现任何异常,因此这种情况也排除。最后才偶然发现是由于VC++中默认的栈空间较小所致。因为VC++默认的栈空间是1M,我们可以将其设置的大一点(比如10M),就会避免上面的错误提示。虽然折腾了好几天,不过最后找到了问题的所在。
具体的更改栈空间大小的方法如下:“项目”→“属性”→“链接器”→“系统”:
将其中的“堆栈保留大小”设置为10M即可。
二、分析
内存的读取速度显然较硬盘要快得多,当程序遇到大规模数据的频繁存取时,开辟内存空间显得尤为重要,一般来说,我们所使用的的内存有堆和栈之分,其他的我们很少控制,栈的速度较快,但是控件小,不灵活;而堆的控件几乎可以满足任何要求,而且灵活,但是相对于栈来说,速度要慢很多,并且在VC中堆是人为控制的,new了就要delete,否则很容易产生内存泄漏等问题。