\r\n\r\n
プログラミングでは、データを保存することが必要である。データはメモリーに保存されます。これらのメモリロケーションは変数と呼ばれます。各変数は特定の型を持っています。整数、浮動小数点、倍精度、文字などである。また、同じ型の要素の固定サイズのシーケンシャルなコレクションを格納するデータ構造もある。配列である。プログラマは配列のサイズを宣言する必要があります。もしプログラマが5要素の整数配列を宣言した場合、宣言したサイズより大きなインデックスに値を割り当てることはできない。メモリの割り当ては固定されており、実行時に変更することはできません。また、メモリの割り当て方法として、動的なメモリ割り当てがあります。ダイナミックメモリーアロケーションは、必要な時に多くのメモリーを割り当て、必要な時にメモリーを解放するのに役立ちます。calloc と malloc の主な違いは、calloc はメモリを割り当てた後、割り当てたメモリブロックを 0 に初期化するのに対し、malloc はメモリを割り当てた後、割り当てたメモリを 0 に初期化しないことである。.callocの中身にアクセスするとゼロになりますが、mallocではゴミのような値が出てきます。
1. 概要と主な違い 2. callocとは 3. mallocとは 4. callocとmallocの類似点 5. 横並びの比較 - 表形式でのcallocとmalloc 6. まとめ
メモリ割り当てとは、実行中のプログラムに対してメモリを割り当てる作業のことである。時には、メモリのサイズを変更する必要があります。そのため、動的なメモリ割り当てが行われます。ポインターを用いて行われる。ポインターは、他の変数のアドレスを保持する参照変数である。
図01:callocとmalloc
callocは "contiguous allocation "の略です。同じ大きさの複数のメモリブロックを割り当てる。callocは次のような構文である。2つの引数が必要です。ブロック数と各ブロックの大きさである。calloc関数はNULLポインタを返すので、キャスト演算子を使って、必要なデータ型に応じたポインタの型を返します。
void*calloc (サイズ番号、サイズサイズ)。
以下の簡単なC言語プログラムを参考にしてください。
#を含む
#を含む
内部メイン(){。
int ptr* = (int*) calloc(20, sizeof(int)).
If (ptr==NULL) { {.
printf ("memory not allocated").
}
その他
printf ("memory allocated").
}
0を返します。
}
上記の手順で、最大20個の要素を格納できる連続したメモリブロックを確保します。それぞれのサイズは整数である。整数の型はコンパイラによって異なるため、Sizeof(int)を使用します。
メモリの割り当てに成功した場合は、メモリブロックのベースアドレスが返されます。これは、ポインタptrがメモリブロックのベースアドレスを指すようになったことを意味します。割り当てられた領域はすべて0に初期化される。メモリ割り当てのメッセージが表示されます。メモリの確保に失敗した場合は、NULLポインタを返します。そのため、メモリが割り当てられていない旨のメッセージが表示されます。
malloc関数は、メモリに必要なバイト数を割り当てるために使用します。mallocの構文は以下のとおりです。サイズは、必要なメモリ量(バイト)を示す。
void*malloc (サイズ)。
malloc関数はNULLポインタを返すので、キャスト演算子を使って目的のデータ型に応じたポインタ型を返します。
malloc関数を使った次の簡単なCプログラムを参考にしてください。
#を含む
#を含む
内部メイン(){。
int ptr*=(int*)malloc(10*sizeof(int))となります。
If (ptr==NULL) { {.
printf ("memory not allocated").
}
その他
printf ("memory allocated").
}
0を返します。
}
上記の手順でメモリブロックが確保されます。ポインターは、割り当てられたメモリーの開始アドレスを指す。返されたポインタは,整数型に変換される。メモリが確保されている場合は、メモリ確保完了のメッセージを表示する。メモリが確保されていない場合は、ヌルポインタを返す。そのため、Memory Not Allocatedのメッセージが表示されます。
カーロック vs マーロック | |
callocは、C言語のstdlib.hヘッダーファイルにある動的メモリ割り当て用の関数で、特定のバイト数を割り当て、ゼロに初期化します。 | mallocは、C言語のstdlib.hヘッダーファイルにある動的メモリ割り当て用の関数で、特定のバイト数を割り当てるものです。 |
意義 | |
callocはcontinuous allocationの略です。 | mallocは、メモリ割り当ての略です。 |
文法 | |
callocの構文はvoid*calloc (size\u tu num, sizet size)と同様である。 | malloc の構文は void*malloc (size_t_size); と同様である。 |
パラメータ数 | |
callocは2つの引数をとり、ブロック数と各ブロックのサイズを指定する。 | mallocは引数を受け付けるが,これはバイト数である。 |
スピード | |
callocはmallocより若干時間がかかりますが、これは割り当てられたメモリをゼロに初期化するステップが追加されているためです。 | malloc は calloc よりも高速です。 |
配列を用いた静的メモリ配置では、メモリは固定されます。もし、保存される要素が少なければ、残りのメモリが無駄になります。また、割り当てられたメモリが必要なメモリより少ない場合、エラーになることがあります。そのため、動的なメモリ割り当てが行われます。C言語では、callocとmallocは動的なメモリ割り当てを提供します。callocとmallocの違いは、callocはメモリを割り当て、割り当てたメモリブロックをゼロに初期化するのに対し、mallocはメモリを割り当てますが、メモリブロックをゼロに初期化しません。mallocは二つの引数を受け付け、一方callocは二つの引数を受け付けます。
この記事のPDF版をダウンロードし、引用元に従ってオフラインで使用することができます。 malloc版との差分はこちらからダウンロードできます。