3

Cで動的メモリ割り当てを使用する場合malloc()と使用する場合の違いを説明できる人はいますか?calloc()

4

6 に答える 6

5

これを試してみてください: malloc を使用してメモリを割り当てます

char* pszKuchBhi ;
pszKuchBhi = malloc(10) ;
printf( "%s\n", pszKuchBhi ) ;  
// Will give some junk values as the memory allocated is not initialized and 
// was storing some garbage values

malloc を calloc に置き換えて、同じことを行います。違いを見ます。

char* pszKuchBhi ;
pszKuchBhi = calloc( 10, 1 ) ;
printf( "%s\n", pszKuchBhi ) ; 
//Will print nothing as the memory is initialized to 0

calloc によって割り当てられたメモリは 0 に初期化されます。メモリを初期化するのは初心者には適していますが、calloc は割り当ててから初期化する必要があるため、パフォーマンスが低下します。より明確にするために、同じ質問をいつでもグーグルで検索できますが、実際に体験して内部を確認することをお勧めします。自分の目で確かめるために、自分の記憶を監視することもできます。

于 2012-08-23T11:34:45.030 に答える
0

0 に初期化された 100 バイトのメモリを割り当てます。

char *ptr = calloc(100, sizeof(char));

malloc() を使用すると、

char *ptr = malloc(100);
int i = 0;
for(i=0; i< 100; i++)
    ptr[i] = 0;

メモリを割り当てた直後に、初期化がうまく行けば、malloc(). 0 に初期化してからデータで初期化する必要はありません。

于 2012-08-23T09:02:24.800 に答える
0

malloc を使用してメモリを割り当てると、メモリは単純にガベージ値で割り当てられ、calloc を使用してメモリを割り当てると、メモリが割り当てられ、各メモリ位置が 0 で埋められます。

于 2012-08-23T09:07:47.627 に答える
0

malloc固定バイト数の割り当てを返します。このメモリはクリアされません (ガベージ値)。

calloc特定のメモリの固定数のオブジェクトの割り当てを返します。このメモリはゼロになります。

于 2012-08-23T08:55:01.623 に答える
0

1 つはプリミティブ ( malloc()) で、もう 1 つはより便利な関数 ( calloc()) です。calloc()本質的には、次のように実装されていると考えることができます。

void * my_calloc(size_t num_elems, size_t elem_size)
{
  const size_t bytes = num_elems * elem_size;
  void *p;

  if((p = malloc(bytes)) != NULL)
  {
    memset(p, 0, bytes);
  }
  return p;
}
于 2012-08-23T09:56:29.583 に答える
0

100 int を割り当てたい場合。次のようにする必要があります。

int *var;

var = malloc(100 * sizeof(int));
// OR
var = calloc(100, sizeof(int));

mallocパラメータにバイト数を取り、数値と要素を受け取るためcalloc、計算自体を実行し、割り当てられたすべてのメモリをゼロで埋めます。

于 2012-08-23T09:04:30.300 に答える