第三に、メモリ管理

1、のcalloc

ヘッダファイルを#includeし<stdlib.h>に含ま

定義関数のvoid *のはcalloc(size_tのnmemb個、size_tのサイズ);

機能説明のcalloc()、nmemb個の隣接するメモリユニットを設定したサイズのための各単位サイズ、および最初の要素を指すポインタを返すします。)(使用のcallocに、しかしメモリの内容を0に初期化されるときにメモリを構成します。malloc関数(nmemb個*サイズ):これは、以下のように同じ効果です。

ポインタの戻り値が正常に設定返された場合は、故障NULLが返されます。

2、無料

ヘッダファイルを#includeし<stdlib.h>に含ま

定義された関数ボイドのない(void *型のPTR);

前のmalloc()のcalloc()またはのrealloc()戻りを指すように機能説明PTRパラメータメモリポインタ。それが撤回されるメモリ空間の意味の範囲内で自由に()PTRを呼び出した後。回収されたメモリ空間または未知のメモリアドレスの意義の範囲内PTRパラメータは、呼び出しは()のケースを解放する場合に起こった予想外のがあるかもしれません。

PTR引数がNULLの場合、無料()何の効果もありません。

3、はgetpagesize

ヘッダファイルの#include <unistd.h>

定義関数size_t型のはgetpagesize(無効)。

説明機能は、バイト(バイト)で、ページサイズを返します。これは、システムのページ・サイズであり、ページングハードウェアのサイズと必ずしも同じではありません。

戻り値メモリページサイズ。

4、malloc関数

ヘッダファイルを#includeし<stdlib.h>に含ま

定義された関数のvoid * malloc関数(size_tのサイズ);

説明関数のmalloc()は、指定されたサイズによって決定される大きされたメモリ空間を構成するために使用されます。

ポインタの戻り値が正常に設定返された場合は、故障NULLが返されます。

5、MMAP

ヘッダファイルの#include <unistd.h>

      書式#include <sysの/ mman.h>

定义函数void *型のmmap(ボイド*スタート、size_tの長さ、int型PROT、フラグをint型、int型のfd、off_t型offsize)。

機能説明MMAP()は、メモリに直接ファイルの内容を読み書き可能なメモリ領域へのアクセスをファイルの内容をマッピングするために使用されます。パラメータは、システムが自動的に代わってアドレスを選択し、通常はNULLに設定し、欲求を対応する出発メモリアドレスにポイントを開始し、

      アドレスは、対応する成功の後に戻ります。どのくらいのメモリに対応する文書部分の長さを表すパラメータ。マッピング領域のProtの保護パラメータの代表、

      以下の組成を有する:
      PROT_EXECマッピング領域行うことができる
      PROT_READマップされた領域を読み取ることができる
      PROT_WRITEマップされた領域を書き込むようにしてもよい
      PROT_NONEマッピング領域にアクセスすることはできません

      パラメータフラグは、そのマップ領域に影響します。

      パラメータアドレスが正常に開始マッピングの意味の範囲内で確立できない場合MAP_FIXED、マッピングは補正に対応していない、あきらめました。通常、このフラグの使用を奨励していません。

      地域をマッピングされたMAP_SHARED書き込みデータは、内のファイルをコピーし直さなく、ファイル共有をマッピングする他のプロセスを可能にします。     

      マップされた地域へのMAP_PRIVATE書き込み動作が、それは「コピーオンライト」(書き込み時コピー)元のファイルの内容に書かれていません。この地域に変更を加えるためにプライベートで、マップファイルをコピーします。

      匿名のマッピングをMAP_ANONYMOUS。このパラメータのFDを無視し、それはファイルとマッピングされた領域は、他のプロセスと共有することはできません含まれません。

      MAP_DENYWRITEがマップされた領域に書き込み操作のみを許可し、他のファイル操作が直接書き込みを拒否されます。

      領域は、ライブロックにマップするMAP_LOCKED、これは(スワップ)領域が交換されないことを示します。

      mmapを呼び出すときMAP_SHAREDまたはMAP_PRIVATEを指定する必要があります()。FDオープンのファイルパラメータ()メモリマップドファイルを代表する、記述子を返します。オフセットパラメータファイルマッピングは、通常、0に設定されているオフセットは、それはファイルから最前方表し

スタートに対応して、ページサイズの倍数でなければなりませんオフセット。

成功した戻り値のマッピングメモリマッピングされた領域の開始アドレスが返された場合、そうでない場合MAP_FAILEDリターン(-1)、errnoに格納されたエラーの原因。

エラーコードEBADFのfd引数が有効なファイルディスクリプタではありません

      EACCESアクセスが間違っています。この場合、ファイルは読み取りMAP_PRIVATEである必要があり、MAP_SHARED PROT_WRITEでファイルを持っているとに書き込むことができます。

      EINVALパラメータは、オフセット正当であり、長さを開始するかではありません。
      EAGAINファイルがロックされ、またはあまりにも多くのメモリがロックされています。
      ENOMEMメモリ不足。

6、と、munmap

ヘッダファイルの#include <unistd.h>

      書式#include <sysの/ mman.h>

定義関数int型と、munmap(ボイド*スタート、size_tの長さ)。

機能説明と、munmap()は、パラメータの長さの意味の範囲内に開始するマッピングメモリ開始アドレスのパラメータをキャンセルするキャンセルするメモリのサイズがあります。相関関数または使用の幹部は、他の手順のプロセスを実行するときにマップされたメモリは自動的に解除されますが、対応するファイル記述子を閉じないとき

      マップされていません。

戻り値のマップされていない成功した場合、それ以外の場合はを返し、0を-1を返し、errnoが間違った理由に保存されています

エラーコードは、開始EINVALまたは長さパラメータが正当ではありません。

おすすめ

転載: www.cnblogs.com/Malphite/p/11403218.html