どのくらいのメモリ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 で使用可能なメモリの量に依存します。mallocmalloccalloc
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 の例を次に示します。また、メモリを使い終わったら、 を呼び出す必要があることに注意してください。NULLfree
#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) アドレス空間の可用性にも依存します。