Tom*_*Tom 7 c linux ubuntu memory-management segmentation-fault
这段代码在一半的时间里给我分段错误:
int main(int argc, char **argv) {
float test[2619560];
int i;
for(i = 0; i < 2619560; i++)
test[i] = 1.0f;
}
Run Code Online (Sandbox Code Playgroud)
我实际上需要分配一个更大的数组,是否有某种方式允许操作系统允许我获得更多的内存?
我使用的是Linux Ubuntu 9.10
caf*_*caf 23
您正在溢出默认的最大堆栈大小,即8 MB.
您可以增加堆栈大小 - 例如.为32 MB:
ulimit -s 32767
Run Code Online (Sandbox Code Playgroud)
...或者您可以切换到分配malloc:
float *test = malloc(2619560 * sizeof test[0]);
Run Code Online (Sandbox Code Playgroud)
现在你正在2619560*sizeof(float)堆栈上分配(或至少尝试)字节.至少在大多数典型情况下,堆栈只能使用有限数量的内存.您可以尝试定义它static:
static float test[2619560];
Run Code Online (Sandbox Code Playgroud)
这将它从堆栈中取出,因此它通常可以使用任何可用的内存.在其他函数中,定义某些东西会static改变语义,但在main它的情况下几乎没有区别(除了主要理论上的递归可能性main).
| 归档时间: |
|
| 查看次数: |
7517 次 |
| 最近记录: |