Cで動的メモリ割り当てを使用する場合malloc()
と使用する場合の違いを説明できる人はいますか?calloc()
6 に答える
これを試してみてください: 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 は割り当ててから初期化する必要があるため、パフォーマンスが低下します。より明確にするために、同じ質問をいつでもグーグルで検索できますが、実際に体験して内部を確認することをお勧めします。自分の目で確かめるために、自分の記憶を監視することもできます。
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 に初期化してからデータで初期化する必要はありません。
malloc を使用してメモリを割り当てると、メモリは単純にガベージ値で割り当てられ、calloc を使用してメモリを割り当てると、メモリが割り当てられ、各メモリ位置が 0 で埋められます。
malloc
固定バイト数の割り当てを返します。このメモリはクリアされません (ガベージ値)。
calloc
特定のメモリの固定数のオブジェクトの割り当てを返します。このメモリはゼロになります。
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;
}
100 int を割り当てたい場合。次のようにする必要があります。
int *var;
var = malloc(100 * sizeof(int));
// OR
var = calloc(100, sizeof(int));
malloc
パラメータにバイト数を取り、数値と要素を受け取るためcalloc
、計算自体を実行し、割り当てられたすべてのメモリをゼロで埋めます。