C- malloc()的最大尺寸



可能的重复:
Malloc可以分配的最大记忆!

我怎么知道我可以占用malloc()的堆的最大尺寸。我使用MS Visual Studio2010。

有一些与操作系统相关的方法可以找出可用于过程的虚拟内存,但我不知道如何在Windows上执行此操作。但是,您可以通过进行狩猎 减半搜索,用更大的论点镇定马洛克,直到失败,然后将其归为其价值,从而找到它。像

for(i=1; v=malloc(i); i<<=1) free(v);

至此,您知道i/2个字节还可以,而我的字节还不对。现在对实际最大搜索进行二等搜索:

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是您可以成功分配的最大数量。

好吧,为什么不只是查看其参数... size_t。因此,您可以在size_t范围内分配任何内容(SIZE_MAX也可以使用,但是它基于size_t,并且事件,如果不是,则malloc S签名仍然是您必须处理的)。

)。

您的问题有点不清楚,但是如果您实际上在问最大堆大小,那么从理论上讲,它是由本机指针大小确定的。例如,在32位系统上,指针可以保持0和2^32-1之间的任何地址(当然,地址0无效)。

当然,实际上,必须考虑一些细节,其中大多数是特定于操作系统的。机器中安装了多少物理内存(RAM)?如果您使用虚拟地址,那么这会使事情复杂化,因为您不再受到物理RAM的限制(尽管性能会掉落不断的分页悬崖)。

当思考您的程序可以在给定平台上分配多少时,它有助于了解虚拟地址空间的工作方式。

相关内容

  • 没有找到相关文章

最新更新