可以分配多少内存calloc
?malloc
asmalloc
并且calloc
可以动态分配内存
例子
void *malloc (size_in_bytes);
并且calloc
可以根据块数分配内存
例子
void *calloc (number_of_blocks, size_of_each_block_in_bytes);
可以分配多少内存calloc
?malloc
asmalloc
并且calloc
可以动态分配内存
例子
void *malloc (size_in_bytes);
并且calloc
可以根据块数分配内存
例子
void *calloc (number_of_blocks, size_of_each_block_in_bytes);
您可以分配尽可能多的字节,因为类型size_t
具有不同的值。所以在 32 位应用程序中它是 4GB 在 64 位 16我什至不知道如何调用这个大小
总而言之,您可以分配机器的所有内存。
除了受到 PC 中 RAM 数量的限制之外,它还取决于系统,但在 Windows 上,它是_HEAP_MAXREQ
根据MSDN 上的文章malloc
。请注意malloc
,但calloc
不保证分配任何东西。这完全取决于执行 PC 上有多少可用内存。
如果内存分配失败或请求的内存量超过 _HEAP_MAXREQ,malloc 会将 errno 设置为 ENOMEM。
_HEAP_MAXREQ
定义如下malloc.h
(至少在 Visual Studio 2010 中包含)。
#ifdef _WIN64
#define _HEAP_MAXREQ 0xFFFFFFFFFFFFFFE0
#else
#define _HEAP_MAXREQ 0xFFFFFFE0
#endif
不过,您不应该真正担心这一点。使用时,malloc
您应该确定您真正需要多少内存,并将其作为请求调用。如果系统无法提供,malloc
将返回NULL
。在你打电话给你之后,malloc
你应该经常检查它是否不是NULL
。这是 MSDN 文章中关于正确使用的 C 示例。另请注意,一旦您完成了内存,您需要调用free
.
#include <stdlib.h> // For _MAX_PATH definition
#include <stdio.h>
#include <malloc.h>
int main( void )
{
char *string;
// Allocate space for a path name
string = malloc( _MAX_PATH );
// In a C++ file, explicitly cast malloc's return. For example,
// string = (char *)malloc( _MAX_PATH );
if( string == NULL )
printf( "Insufficient memory available\n" );
else
{
printf( "Memory space allocated for path name\n" );
free( string );
printf( "Memory freed\n" );
}
}
就语言定义而言,每次调用的唯一上限是size_t
支持的内容(例如,如果最大值size_t
是 2 32malloc
-1,那么这是可以为单个块分配 的最大字节数)。
您是否拥有可用于成功调用此类调用的资源取决于实施和底层系统。
On linux, indefinite amounts, i. e. much more than you have either physical or virtual memory.
As long, as you don't actually use it, you're fine, it's just when you actually use more memory than available that the out-of-memory killer starts running amok, and shoots down your process.
This is the reason why many people don't bother checking the result of malloc()
anymore, because it's not null even when the returned buffer can never be backed...
1) 这取决于用户的资源限制。2) 它还取决于地址空间的可用性。