【C言語】mallocとcallocの違いについて

目次から探す

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を使い分けることができます。

必要なメモリの確保方法や初期化の有無に応じて、適切な関数を選択しましょう。

mallocとcallocの使い分けには、プログラムの要件やパフォーマンスの観点から考慮する必要があります。

メモリの確保方法や初期化の有無によって、プログラムの動作や実行速度に影響を与えることがあるため、適切な選択を行うことが重要です。

1 2

この記事のページ一覧
  1. 現在のページ
目次から探す