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