mallocとfree

2242 ワード

stdlibに定義する.h
mallocとfree
C関数ライブラリには、動的メモリ割り当てと解放を実行するための2つの関数、mallocとfreeが用意されています.これらの関数は、使用可能なメモリプールを維持します.
  • 関数プロトタイプ
    void *malloc(size_t size);
    void free(void *pointer);
  • malloc
  • プログラムがmallocを呼び出すと、mallocはメモリプールから適切なメモリを抽出し、このメモリを指すポインタをプログラムに返します.
  • このメモリは初期化されていません.
  • 初期化:手動またはcalloc関数を使用します.

  • mallocのパラメータは、割り当てが必要なバイト数です.
  • mallocは、連続したメモリを割り当てます.
  • mallocが返すメモリは、境界整列の要件を厳格に満たしています.

  • メモリプールが空の場合、または使用可能なメモリがプログラム要求を満たすことができない場合、どうなりますか?
  • malloc関数は、より多くのメモリを取得し、この新しいメモリ上で割り当てタスクを実行するようにオペレーティングシステムに要求します.オペレーティングシステムがmallocにより多くのメモリを提供できない場合、mallocはNULLポインタを返します.

  • したがって、
  • は、mallocから返される各ポインタを検査し、NULLでないことを確認することが重要である.

  • malloc戻り値
  • 規格は、1つのvoid*タイプのポインタが他の任意のタイプのポインタに変換できることを示す.一部のコンパイラでは、変換時に強制タイプ変換を使用する必要がある場合があります.

  • free
  • freeのパラメータはNULLか、malloc、calloc、reallocから以前に返された値です.
  • freeにNULLパラメータを渡すと、何の効果も得られません.

  • callocとrealloc
    プロトタイプ:
    void *calloc(size_t num_elements, size_t element_size);
    void realloc(void *ptr, size_t new_size);
  • calloc:2つのパラメータ、要素の数、および要素のバイト数.
  • reallocは、割り当てられたメモリブロックのサイズを変更するために使用される.
  • realocの最初のパラメータがNULLである場合、その動作はmallocにそっくりである.

  • 動的割当てメモリの使用
    int *pi;
    pi = malloc(100);
    // pi     100      
    //      4       ,        25        ,
    //    pi          。
  • ターゲットが25個の整数を格納メモリを取得する場合、書き込みはより移植性が高い:
    pi = malloc( 25 * sizeof(int) );
  • メモリの使用方法:ポインタも下付きも使用できます.

  • 参考:『Cとポインタ』