vs2015栈溢出的解决办法以及读取一个超大数组的方法

错误现象一:vs2015栈溢出

产生错误的代码:

int main()
{
    
    
	int f[5000000];
	return 0;
}

错误现象:
在这里插入图片描述

错误产生的原因

vs默认的栈的大小只有1M,当定义的数组大于1M时就会直接报对战溢出的错误。

解决办法

此时应该设置vs里栈的大小,设置大一点比如50M,参考这篇文章进行: 修改visual studio的默认堆栈大小

错误现象二:读取一个超大数组出错

产生错误的原因,头文件包含的数据很大,接近1个G
在这里插入图片描述
其中这些头文件包含的数据很大,接近1个G:在这里插入图片描述
这个数组就有几百M
在这里插入图片描述
设置VS栈的大小为1000M,也即1000 x 1024 x1024 = 1048576000
在这里插入图片描述
目前改大了也不行。。。出现了堆溢出的错误。
在这里插入图片描述
在找解决办法。。。


错误二产生的原因

直接以头文件的方式include装有数组的.h文件。
网上没有解决办法,和同学讨论知道的。

不要把数组直接存为.h文件,电脑要么要编译很久,要么直接卡死,解决办法就是把数据直接存为二进制文件或者txt文件再读入。

千万不要这样!!!!!!!
在这里插入图片描述

错误二的解决办法

不成功方法一

本来打算用python将数据保存为csv格式的,但是保存一个33554432个float32的数组竟然保存了四个小时还没完,我也是醉了。。。另外用c++读取csv到数组里也并不简单。为了读取方便,我用python保存csv的时候,只将数据保存为1行,奈何我连数据存储都没有完成。

不过python保存csv的代码还是记录一下:

import csv
csv_writer = csv.writer(f)
csv_writer.writerow(checkpoint['state_dict']['conv1.weight'].flatten().numpy().tolist())

成功方法二

python将数据存为二进制,并用c++读取
python保存二进制文件,以及c语言读取二进制文件到数组,几百兆的数据瞬间完成(目测不到1秒),第一次体会到二进制的美妙!!!

并且将数据存为二进制后,文件大小少了好多:
在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_40162095/article/details/114042745
今日推荐