Aan*_*Aan 1 c heap malloc visual-studio
可能重复:
malloc可以分配的最大内存!
我怎么知道我可以占用的堆的最大大小malloc()
.我使用的是MS Visual Studio 2010.
有与操作系统相关的方法可以找出可用于您的进程的虚拟内存量,但我不知道如何在Windows上执行此操作.但是,您可以通过执行搜索+减半搜索来找到它,使用更大的参数调用malloc直到它失败,然后查看它的值.就像是
for(i=1; v=malloc(i); i<<=1) free(v);
Run Code Online (Sandbox Code Playgroud)
到目前为止,您知道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;
}
Run Code Online (Sandbox Code Playgroud)
此时,a
是您可以成功分配的最大金额.
好吧,为什么不直接看看它的论点size_t
...... 因此,您可以分配范围内的任何内容size_t
(SIZE_MAX
也可以,但它size_t
无论如何都是基于的,如果不是,则malloc
s 签名仍然是您必须处理的)。
您的问题有点不清楚,但如果您实际上是在问最大堆大小是多少,那么理论上,它是由本机指针大小决定的。例如,在 32 位系统上,指针可以保存 0 到 2^32-1 之间的任何地址(当然,地址 0 通常不有效)。
当然,在实践中,有一些细节必须考虑,其中大多数是特定于操作系统的。计算机中安装了多少物理内存 (RAM)?如果您的操作系统使用虚拟地址,那么这会使事情变得复杂,因为您不再受到物理 RAM 的限制(尽管性能会随着不断的分页而急剧下降)。
当考虑您的程序可以在给定平台上分配多少空间时,它有助于理解虚拟地址空间的工作原理。
归档时间: |
|
查看次数: |
9409 次 |
最近记录: |