Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
malloc()的最大大小_C_Visual Studio_Malloc_Heap - Fatal编程技术网

malloc()的最大大小

malloc()的最大大小,c,visual-studio,malloc,heap,C,Visual Studio,Malloc,Heap,可能重复: 如何知道通过malloc()可以占用的堆的最大大小。 我使用微软Visual Studio 2010。好吧,为什么不看看它的论点大小\u t。因此,您可以分配size\u t范围内的任何内容(size\u MAX也可以工作,但无论如何它都是基于size\u t的,如果不是这样的话,malloc的签名仍然是您必须处理的) 您的问题有点不清楚,但是如果您实际询问最大堆大小是多少,那么理论上,它是由本机指针大小决定的。例如,在32位系统上,指针可以保存0到2^32-1之间的任何地址(当然

可能重复:

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

好吧,为什么不看看它的论点<代码>大小\u t。因此,您可以分配
size\u t
范围内的任何内容(
size\u MAX
也可以工作,但无论如何它都是基于
size\u t
的,如果不是这样的话,
malloc
的签名仍然是您必须处理的)

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

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


在考虑程序在给定平台上可以分配多少资源时,它有助于理解如何工作。

那么,为什么不看看它的参数<代码>大小\u t。因此,您可以分配
size\u t
范围内的任何内容(
size\u MAX
也可以工作,但无论如何它都是基于
size\u t
的,如果不是这样的话,
malloc
的签名仍然是您必须处理的)

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

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


在考虑程序在给定平台上可以分配多少内存时,它有助于理解如何工作。

有一些依赖于操作系统的方法来确定进程有多少虚拟内存可用,但我不知道如何在windows上做到这一点。但是,您可以通过执行hunt+减半搜索来找到它,使用越来越大的参数调整malloc,直到它失败,然后重新定位它遇到的值。差不多

for(i=1; v=malloc(i); i<<=1) free(v);
for(i=1;v=malloc(i);i1),b=i;a>1;
如果(v=malloc(c)){a=c;free(v);}
否则b=c;
}

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

有一些依赖于操作系统的方法来确定您的进程有多少虚拟内存可用,但我不知道如何在windows上执行此操作。但是,您可以通过执行hunt+减半搜索来找到它,使用越来越大的参数调整malloc,直到它失败,然后重新定位它遇到的值。差不多

for(i=1; v=malloc(i); i<<=1) free(v);
for(i=1;v=malloc(i);i1),b=i;a>1;
如果(v=malloc(c)){a=c;free(v);}
否则b=c;
}

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

我认为OP想知道他/她实际可以分配多少内存,也就是说,有多少内存可以安全分配。@Caleb:是的,我想知道。我要补充一点,@Ed我想OP想知道他/她实际上可以分配多少内存,也就是说,有多少内存可以安全分配。@Caleb:是的,我想知道。“我要补充一点,”埃德,“你问什么还不清楚。您想要malloc()在给定无限内存的情况下可以分配的最大大小,还是想知道如何计算您运行的系统中有多少内存可用?您可以要求最大为
size\u max
,但这几乎肯定会失败。你能成功获得多少取决于许多因素(32位与64位、C运行时版本、操作系统版本、最大页面文件大小、可用物理内存等)。你的要求还不清楚。您想要malloc()在给定无限内存的情况下可以分配的最大大小,还是想知道如何计算您运行的系统中有多少内存可用?您可以要求最大为
size\u max
,但这几乎肯定会失败。你能成功获得多少取决于许多因素(32位与64位、C运行时版本、操作系统版本、最大页面文件大小、可用物理内存等)。我对此投了更高的票,因为我过去确实做到了这一点(尽管不是很简洁——做得很好!)。我用C++在Windows 7中使用GCC 4.8使用NeX/Delphi而不是MALOC/FILE。结果?我在一个块中分配了1953169376字节,并成功地用值填充了它,然后访问了这些值——简言之,它是有效的。在Linux上,这不是一种可靠的方法。我之所以投票支持这一点,是因为我过去确实做过这一点(尽管不是很简洁——做得很好!)。我用C++在Windows 7中使用GCC 4.8使用NeX/Delphi而不是MALOC/FILE。结果?我在一个块中分配了1953169376字节,并成功地用值填充了它,然后访问了这些值——简言之,它是有效的。在Linux上,这不是一种可靠的方法。