我无法将大数组传递给C中的函数。
我宣布:
int image[height][width][3]={};
高度和宽度可以达到1500.当我打电话时:
foo((void *)image,height,width);
声明如下:
int *foo(const int *inputImage, int h, int w);
我得到分段错误错误。奇怪的是,如果我的价值观是:
height=1200;
width=290;
没有问题,但是当它们出现时:
height=1200;
width=291;
我得到了上面提到的错误。每个整数4个字节,高度和宽度都是1500(绝对最差的情况),数组大小将是27MB,imo不是那么大,并不应该真正重要,因为我只传递一个指向第一个元素的指针数组。有什么建议吗?
答案 0 :(得分:3)
在27 MB时,您的阵列可能比堆栈大,通常为1 MB。 foo
开始使用数据后,您就会破坏您的流程。而是在堆上分配数组:
typedef int (*image_buf)[height][width][3];
image_buf image = malloc(sizeof(image_buf));
...
答案 1 :(得分:0)
您可以在unix系统上使用'ulimit -a'检查默认进程堆栈大小
(blocks, -c) 0
数据seg大小(kbytes,-d)无限制 调度优先级(-e)20 文件大小(块,-f)无限制 待处理信号(-i)16382 最大锁定内存(kbytes,-l)64 最大内存大小(千字节,-m)无限制 打开文件(-n)1024 管道大小(512字节,-p)8 POSIX消息队列(字节,-q)819200 实时优先级(-r)0 堆栈大小(千字节,-s)8192 cpu时间(秒,-t)无限制 最大用户进程(-u)无限制 虚拟内存(kbytes,-v)无限制 文件锁(-x)无限