どのくらいのメモリ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);
PC の RAM の量によって制限されることを除けば、システムに依存しますが、Windows では、 MSDN の記事に_HEAP_MAXREQ
よると. ただし、何かを割り当てることが保証されているわけではありません。それはすべて、実行中の PC で使用可能なメモリの量に依存します。malloc
malloc
calloc
malloc は、メモリー割り当てが失敗した場合、または要求されたメモリー量が _HEAP_MAXREQ を超えた場合に、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
必要があります。適切な使用法に関する MSDN 記事の C の例を次に示します。また、メモリを使い終わったら、 を呼び出す必要があることに注意してください。NULL
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 の場合、それは 1 つのブロックに割り当てることができる 最大バイト数です)。
このような呼び出しを成功させるために使用できるリソースがあるかどうかは、実装と基盤となるシステムによって異なります。
1) ユーザーのリソース制限に依存します。2) アドレス空間の可用性にも依存します。