ローカル変数だってスタックに割り当てられるから作業領域の使い方がおかしいかも
たとえば、
int a[1000*1024];
って宣言したら、4Byte*1000*1024=4MBがスタックに取られる