Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何获得阵列的最大可能大小?_C - Fatal编程技术网

C 如何获得阵列的最大可能大小?

C 如何获得阵列的最大可能大小?,c,C,我有一段代码,运行时会出现故障 #include <stdlib.h> // size_t int main() { size_t s = 0xFFF; char a[ s * s ]; a[ 0 ] = 'a'; return 0; } 更新: 我知道大对象应该用malloc()分配,而小数组可以在堆栈上本地分配。但是,我想知道这些小数组的确切大小。我还希望解决方案是可移植的 另外,如果在分配数组之前堆栈上还有其他东西呢?在这种情况下,堆栈的

我有一段代码,运行时会出现故障

#include <stdlib.h> // size_t

int main()
{
    size_t s = 0xFFF;
    char a[ s * s ];

    a[ 0 ] = 'a';

    return 0;
}
更新: 我知道大对象应该用malloc()分配,而小数组可以在堆栈上本地分配。但是,我想知道这些数组的确切大小。我还希望解决方案是可移植的


另外,如果在分配数组之前堆栈上还有其他东西呢?在这种情况下,堆栈的最大大小不能用作数组的大小,因为堆栈将溢出。

问题不是由“数组的最大大小”(我认为甚至不存在这样的限制)引起的,而是由堆栈大小的限制引起的,因为您正在堆栈上声明数组

如果您在Linux上,则可以使用
getrlimit
进行查询。此外,您可能会发现
getrusage
很有帮助。然而,我认为对于大型项目,它们应该在堆上分配(通过类似
malloc


有关更改最大堆栈大小的信息,请参见堆栈中的数组定位。您可以使用命令
ulimit-s
检查默认堆栈大小。比如说,
ulimit-s
告诉您堆栈大小是1024字节(实际上应该是8MB),在您的情况下,
s
使用8字节,因此
a
最多可以是1016字节。

这不是最大数组大小的问题,而是最大堆栈帧大小的问题。最大大小取决于操作系统、体系结构和最大堆栈大小。例如,在Linux上,您可以使用Windows对其进行调整。在Windows上,有几种方法可以控制它,请参阅

但这些都不适用。如果要分配一个大数组,请从堆而不是堆栈上分配它

gcc file.c