目次から探す
mallocとcallocの使い分け
mallocとcallocの大きな違いは、メモリの初期化の有無です。
mallocで確保したメモリは、初期化されていない状態で返されます。
つまり、確保したメモリの内容は不定です。
一方、callocで確保したメモリは、全てのビットが0で初期化されます。
つまり、確保したメモリの内容は0で埋められます。
メモリの初期化が必要ない場合は、mallocを使用することで、メモリの確保が効率的に行えます。
一方、メモリの初期化が必要な場合は、callocを使用することで、初期化処理を省略することができます。
例えば、int型
の要素を5つ持つ配列を確保する場合、mallocでは確保したメモリの内容は不定ですが、callocでは確保したメモリの内容は全て0で初期化されます。
#include <stdio.h>
#include <stdlib.h>
int main() {
int* array1 = (int*)malloc(sizeof(int) * 5);
int* array2 = (int*)calloc(5, sizeof(int));
printf("array1:\n");
for (int i = 0; i < 5; i++) {
printf("%d ", array1[i]);
}
printf("\n\narray2:\n");
for (int i = 0; i < 5; i++) {
printf("%d ", array2[i]);
}
free(array1);
free(array2);
return 0;
}
上記のコードでは、array1とarray2というint型
の要素を5つ持つ配列を確保しています。
array1はmallocを使用して確保されたため、初期化されていないため、不定な値が表示されます。
一方、array2はcallocを使用して確保されたため、全ての要素が0で初期化されているため、0が表示されます。
このように、メモリの確保方法や初期化の有無によって、mallocとcallocを使い分けることができます。
必要なメモリの確保方法や初期化の有無に応じて、適切な関数を選択しましょう。
メモリの確保方法や初期化の有無によって、プログラムの動作や実行速度に影響を与えることがあるため、適切な選択を行うことが重要です。