工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Industrial programming >> C言語

malloc() と calloc():主な違いを例で説明

malloc と calloc の違いを学ぶ前に、学びましょう-

動的メモリ割り当てとは

動的メモリ割り当ては、実行時にメモリを割り当てるプロセスです。プログラムの実行中にメモリを割り当てて解放するために使用できる、calloc()、free()、realloc()、および malloc() の 4 つのライブラリ ルーチンがあります。これらのルーチンは、stdlib.h というヘッダー ファイルで定義されています。

malloc() とは?

これは、メモリのブロックを動的に割り当てるために使用される関数です。指定されたサイズのメモリ空間を確保し、メモリ位置を指す null ポインタを返します。

通常、返されるポインタは void 型です。これは、malloc 関数を任意のポインターに割り当てることができることを意味します。 malloc の完全な形式はメモリ割り当てです。

このチュートリアルでは、次のことを学びます:

calloc() とは?

Calloc() 関数は、複数のメモリ ブロックを割り当てるために使用されます。これは、配列や構造体などの複雑なデータ構造にメモリを割り当てるために使用される動的メモリ割り当て関数です。この関数が指定された十分なスペースを割り当てられなかった場合、null ポインターが返されます。 calloc 関数の完全な形式は連続割り当てです。

malloc() を使用する理由

malloc() を使用する理由は次のとおりです

calloc() を使用する理由

calloc() を使用する理由は次のとおりです

malloc() の構文

malloc() の構文は次のとおりです

ptr = (cast_type *) malloc (byte_size);

上記の構文では、ptr は cast_type のポインターです。 malloc 関数は、byte_size の割り当てられたメモリへのポインタを返します。

Example: ptr = (int *) malloc (50)

このステートメントが正常に実行されると、50 バイトのメモリ空間が確保されます。予約済みスペースの最初のバイトのアドレスは、int 型のポインター「ptr」に割り当てられます。

calloc() の構文

malloc() の構文は次のとおりです

ptr = (cast_type *) calloc (n, size);

上記の構文は、同じサイズの n 個のメモリ ブロックを割り当てるために使用されます。メモリ空間が割り当てられると、すべてのバイトがゼロに初期化されます。現在、割り当てられたメモリ空間の最初のバイトにあるポインターが返されます。

C での malloc() の例

次のコードでは、sizeof(*ptr) を使用して 15 個の整数のメモリ ブロックを割り当てています。 printf ステートメントでは、6 番目の整数の値を見つけています。

#include<stdlib.h>
#include<stdio.h>
int main(){
int *ptr;
ptr = malloc(15 * sizeof(*ptr)); 
    if (ptr != NULL) {
      *(ptr + 5) = 480; 
      printf("Value of the 6th integer is %d",*(ptr + 5));
    }
}

出力:

6 番目の整数の値は 480 です

C での calloc() の例

以下の C 言語プログラムは、最初の 10 項の合計を計算します。ポインタ値が null の場合、メモリ空間は割り当てられません。

for ループは、変数「i」の値を反復し、合計を出力するために使用されます。最後に、関数 free を使用してポインターを解放します。

#include <stdio.h>
#include <stdlib.h>
    int main() {
        int i, * ptr, sum = 0;
        ptr = calloc(10, sizeof(int));
        if (ptr == NULL) {
            printf("Error! memory not allocated.");
            exit(0);
        }
        printf("Building and calculating the sequence sum of the first 10 terms \n");
        for (i = 0; i < 10; ++i) { * (ptr + i) = i;
            sum += * (ptr + i);
        }
        printf("Sum = %d", sum);
        free(ptr);
        return 0;
    }

出力:

最初の 10 項の数列和を構築して計算 n Sum =45

calloc() と malloc() の違い

malloc() と calloc() の重要な違いは次のとおりです:

ma​​lloc() calloc() Malloc() 関数は、ユーザーが指定したサイズの単一のメモリ ブロックを作成します。Calloc() 関数は、変数に複数のメモリ ブロックを割り当てることができます。Malloc 関数にはガベージ値が含まれています。calloc 関数によって割り当てられたメモリ ブロックは、常にゼロ。引数の数は1。引数の数は2。Callocはmallocより遅い。Mallocはcallocより速い。callocに比べて安全ではない。mallocに比べて安全に使用できる。callocよりも時間効率が高い。 ().malloc()よりも時間効率が悪い.Malloc()関数は開始アドレスのみを返し0にしない.アドレスを割り当てる前にCalloc()関数は開始アドレスを返し0にする.初期化は行わない.メモリの初期化を行います。

主な違い:


C言語

  1. C# 式、ステートメント、およびブロック (例付き)
  2. C++ do…while ループと例
  3. C++ ポインタと例
  4. C++ Char データ型と例
  5. C++ 演算子のオーバーロードと例
  6. C++ 関数とプログラム例
  7. 例を含む C# コレクションのチュートリアル
  8. while と do-while の違い:例で説明
  9. C ライブラリの calloc() 関数とプログラムの例
  10. 例を使用した Python 文字列 count()
  11. 例を使用した Python round() 関数