malloc()的最大大小

时间:2012-11-02 20:20:07

标签: c visual-studio malloc heap

  

可能重复:
  maximum memory which malloc can allocate!

如何通过malloc()知道我可以占用的堆的最大大小。 我使用的是MS Visual Studio 2010。

2 个答案:

答案 0 :(得分:7)

有与操作系统相关的方法可以找出可用于您的进程的虚拟内存量,但我不知道如何在Windows上执行此操作。但是,您可以通过执行搜索+减半搜索来找到它,使用更大的参数调用malloc直到它失败,然后查看它的值。像

这样的东西
for(i=1; v=malloc(i); i<<=1) free(v);

此时你知道i / 2字节是正常的,而i字节不正常。现在进行二分搜索实际最大值:

for(a=(i>>1), b=i; a < b-1;)
{
    c=(a+b)>>1;
    if(v=malloc(c)) { a=c; free(v); }
    else b=c;
}

此时,a是您可以成功分配的最大金额。

答案 1 :(得分:4)

那么,为什么不看看它的论点...... size_t。因此,您可以分配size_t范围内的任何内容(SIZE_MAX也可以使用,但无论如何它都基于size_t,如果不是,则为malloc签名仍然是你必须处理的事情。)

你的问题有点不清楚,但如果你实际上问的是最大堆大小是什么,理论上,它是由本机指针大小决定的。例如,在32位系统上,指针可以保存0到2 ^ 32-1之间的任何地址(当然,地址0通常不是有效的。)

当然,在实践中,必须考虑细节,其中大多数是特定于操作系统的。机器中安装了多少物理内存(RAM)?如果你的操作系统使用的是虚拟地址,那么这会使你的内容变得复杂,因为你不再受物理内存的限制(尽管性能会随着不间断的分页而下降)。

在考虑您的程序在给定平台上可以分配多少时,有助于了解virtual address space的工作原理。