2

どのくらいのメモリcallocmalloc割り当てることができますか?

Asmallocおよびcallocメモリを動的に割り当てることができます

void *malloc (size_in_bytes);

またcalloc、ブロック数に応じてメモリを割り当てることができます

void *calloc (number_of_blocks, size_of_each_block_in_bytes);
4

5 に答える 5

4

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" );
   }
}    
于 2013-10-14T19:41:23.317 に答える
1

言語定義に関する限り、呼び出しごとの上限size_tはサポートされるものだけです (たとえば、最大size_t値が 2 32malloc -1 の場合、それは 1 つのブロックに割り当てることができる 最大バイト数です)。

このような呼び出しを成功させるために使用できるリソースがあるかどうかは、実装と基盤となるシステムによって異なります。

于 2013-10-14T20:04:17.033 に答える
0

1) ユーザーのリソース制限に依存します。2) アドレス空間の可用性にも依存します。

于 2014-03-18T10:50:32.190 に答える