【发布时间】:2013-05-30 21:14:48
【问题描述】:
我知道有很多类似的问题(我不确定是否可能重复),但我的问题足够具体。我在 Windows 和 Unix 中运行 C 程序,并且遇到分段错误(核心转储)错误。我知道那个错误的来源。这是因为我有时会通过分配一个大整数数组来使用大量内存。我的数组的大小每次都不同但我不能(主要是我不想) 使用内存的动态分配。
我想要的是找到一种方法或工具来分析我的 C 程序的内存使用情况,以便对该数组的大小或我进行的任何其他大内存分配设置一个限制。更具体地说,让我们说该数组的大小在 4*(2^4) 字节和 4*(2^50) 字节之间。最小值只有 64 个字节,但最大值是一个巨大的值。我怎样才能知道我的内存有多少程序需求以及设置的适当限制是什么? 我这样定义一个数组:
int bigarray[rows][columns],
其中行介于 2^4 和 2^50 之间,列介于 4 和 50 之间。
【问题讨论】:
-
所以您使用的是 VLA,对吗?然后只需检查
sizeof(array) > KNOWN_LIMIT_THAT_OVERFLOWS_THE_STACK -
2^50 为 PB。祝你好运!
-
@RichieHindle 我会将限制设置为小于 2^50,也许是 2^10
-
2^50 甚至超过 MAX int(32 位),
[]甚至可以处理吗? -
printf("%d\n", sizeof(bigarray));如上所述。至于 hwat 可能是适当/有用的限制,取决于平台(Windows、Linux 等)。此外,您还可以使用 malloc/new 方法从程序中压缩更多大小。
标签: c arrays memory memory-management memory-leaks