错误现象一: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秒),第一次体会到二进制的美妙!!!
并且将数据存为二进制后,文件大小少了好多: