最近拿到一段程序,还是让俺DEBUG,命苦啊,是栈溢出,编译链接成功,运行时报错。这位MM在一彩色图片多分辨率处理程序中将一副1024*1024大小的彩色图片的RGB分量存入三个数组,数组在栈上分配的,即形如int ImageDataR[1024][1024] 这种形式,然后呢,你猜,栈溢出程序挂了(说明一下,这个程序只处理大小为1024*1024大小的图片,据说是统一的图片大小和格式要求)。
能不挂吗?这样一个数组的大小是4Byte*1024*1024=4MB,R,G,B三个分量就是12MB,而Windows下C++程序默认的栈空间是2M(VC++2008编译器默认1M,这个值是可以在编译器中设置的),所以光荣的栈溢出了。、
随手写了一段栈溢出的代码:
#include <iostream>
using std::cout;
using std::endl;
int main()
{
int a[1024][256]={0}; //在栈上分配,大小为1M,运行时栈溢出挂掉!
return 0;
}
我给她的建议,最简单的方法,声明动态数组,在堆上面分配。如果对性能过于敏感,可以用内存池。