## C ++ベースのメモリ割り当て関数:malloc関数、のcalloc、reallocの、_alloca、新しい、無料、削除

malloc関数

void *malloc(size_t size);
  • 機能:メモリの連続ブロックバイトアプリケーション・ヒープ・サイズのスペースの長さ。
  • パラメータ:サイズ -サイズの長さのバイト宇宙アプリケーション
  • 戻り値:成功した配布ポイントが割り当てられている場合、メモリポインタが(初期値は、この記憶領域に定義されていない)、それ以外の場合はNULLポインタをNULLを返し、最初のアプリケーションのアドレス空間である戻されます。メモリが使用されなくなった場合には、メモリブロックを解放し自由()関数を使用しないでください。関数は、任意のデータ・オブジェクトのために使用することができるように、ポインタが適切に位置合わせされなければならない返します。
  • 注:ポインタのvoid *型表す未定タイプ、明確に言うではないものを、ユーザーが店舗に、このスペースを使用しているデータの種類を知っているアプリケーションのメモリ空間の時間を指す(例えばcharまたはintやなど...)
  • ワーキングメカニズム:本質はmalloc関数を反映して、それがいわゆる自由の長いリストに接続され、使用可能なメモリブロックがあるリストをここでmalloc関数、呼び出すときに、接続テーブルのメモリブロックに必要とされるユーザの要求を満たすために十分な大きさを見つけるために。そして、メモリブロックが2つに分割されている(ユーザによって要求されたサイズの大きさに等しく、他方が残りのバイトのサイズです)。次に、ユーザは、ユーザに渡され、そのメモリ、及び接続テーブルに戻り、残りの部分(もしあれば)に割り当てられます。コール無料の機能を、ユーザーが自由連鎖に接続されたメモリブロックを解放します。最後に、ユーザは、メモリの大部分のために適用される場合、アイドルチェーンは、メモリの多くの小断片に切断され、その後、アイドル鎖断片は、ユーザの要件を満たしていなくてもよいです。したがって、メモリの大きなブロックにアイドル鎖上の臨検メモリセグメントの各々をチェックする機能要求遅延、及び開始、ソートそれらは、隣接する小さな空きブロックのmalloc。ないメモリブロックの要件を満たしていない場合に、関数malloc関数はNULLを返すポインタを、そうする際コールmalloc関数のダイナミック・アプリケーション・メモリ・ブロック、決意は値を返さなければなりません。

calloc

void *calloc(unsigned n,unsigned size);
  • 機能:メモリのアプリケーションヒープNUM連続ブロック、各サイズのメモリのバイト数、およびバイトが0に設定されているが初期化され、アプリケーションは、第1のアドレス空間、より便利なアプリケーション・アレイの値を返すが、効率比は、遅くなりますでmalloc()できる多段階の初期ため
  • パラメータ:N- -メモリの連続ブロック、サイズ -メモリのブロック当たりのバイト数
  • 戻り値:成功した配布ポイントが割り当てられている場合、メモリポインタが(初期値は、この記憶領域に定義されていない)、それ以外の場合はNULLポインタをNULLを返し、最初のアプリケーションのアドレス空間である戻されます。メモリが使用されなくなった場合には、メモリブロックを解放し自由()関数を使用しないでください。関数は、任意のデータ・オブジェクトのために使用することができるように、ポインタが適切に位置合わせされなければならない返します。
  • 注:ポインタのvoid *型表す未定タイプ、明確に言うではないものを、ユーザーが店舗に、このスペースを使用しているデータの種類を知っているアプリケーションのメモリ空間の時間を指す(例えばcharまたはintやなど...)

realloc

void* realloc(void* memblock, size_t size);
  • 関数:最初のスペースが十分でない場合、割り当てスペース指定されたサイズの大きさに応じて、元のデータが最後まで先頭にコピーされ、アドレスmemblock点、及び戻りmemblockを展開するために、もしあれば、十分な連続した領域が現在存在するかどうかを決定するためにポインタ新たに割り当てられたメモリ領域、元memblockを放出するメモリ領域を参照し、新たに割り当てられたメモリ領域の先頭アドレスを返します。メモリブロックのすなわち再割り当てアドレス。
  • パラメータ:membloc -現在のメモリブロックポインタ、  サイズ -指定拡大
  • 戻り値:成功した配布ポイントが割り当てられている場合、メモリポインタが(初期値は、この記憶領域に定義されていない)、それ以外の場合はNULLポインタをNULLを返し、最初のアプリケーションのアドレス空間である戻されます。メモリが使用されなくなった場合には、メモリブロックを解放し自由()関数を使用しないでください。関数は、任意のデータ・オブジェクトのために使用することができるように、ポインタが適切に位置合わせされなければならない返します。
  • 注:ポインタのvoid *型表す未定タイプ、明確に言うではないものを、ユーザーが店舗に、このスペースを使用しているデータの種類を知っているアプリケーションのメモリ空間の時間を指す(例えばcharまたはintやなど...)

 

 _alloca:

void * __cdecl alloca(size_t);

メモリ割り当て機能、およびmalloc関数、のcalloc、reallocの類似しますが、重要な違いに注意してください、_allocaは直ちに解放不足し、スタック(スタック)上のスペースのために適用することです。

alloca()関数が返すを呼び出し、それが自動的にメモリを割り当てられますときに解放されます。そうである場合には、 ``スタックフレーム「またはコンテキスト.allocaの機能(ある程度allocaをローカルで割り当てられたメモリ)が可搬性を持っていない、であり、従来のスタックせずにマシンの実装が困難別の関数に直接渡されたときの戻り値は、問題を引き起こす可能性があります。

 fgets(alloca(100), 100, stdin)

これらの理由から、使用に適さないのalloca()規格外には、何もそれはそれで移植性のあるプログラムの広い範囲内であってもよいか便利な問題ではありません。以来、C99は、より良い作業の前に()はallocaを満たすために使用することができる可変長配列(VLA)をサポートしています。非推奨

 

新/新しいです[]

  • 関数:連続したメモリ・バイトのブロックの現在のタイプ(現在のタイプ*配列)のためのアプリケーション・ヒープ内のスペースの長さ。
  • パラメータ:無効
  • 戻り値:成功した配布ポイントが割り当てられている場合、メモリポインタが(初期値は、この記憶領域に定義されていない)、それ以外の場合はNULLポインタをNULLを返し、最初のアプリケーションのアドレス空間である戻されます。メモリが使用されなくなった場合には、メモリブロックを解放します削除します[]機能を使用しないでください。
  • 注:新しいオブジェクトが自動的にコンストラクタを呼び出すことになります。

 

自由

void free(void *ptr)
  • 機能:リリースメモリブロック。
  • パラメータ:PTR -ポインタ割り当てを解除するメモリブロックには、メモリブロックはmalloc関数の、のcallocまたはreallocのを呼び出すことによって、メモリの割り当ての前に行われます。渡されたパラメータがNULLポインタである場合、アクションは実行されません。
  • 戻り値:無効
  • 注:無料()スタック領域上のスペースを解放するために、スタック領域空間は、OSによって管理され適用され、OSによってリリースされていません。スペースを解放した後、フィールドガイドになることを避けるために、空白のポインタを必要と

] [削除/削除

  • 機能:リリースメモリブロック。
  • 戻り値:無効
  • 注:使用削除オブジェクトが解放される] [オブジェクトの配列を解除する[]削除を使用する必要があり、空間アレイの基本的なタイプは、削除してもよい/削除、デストラクタを自動的に呼び出しされるであろう。スタック領域の容量を空けるために行くことができない削除、スタック領域の容量は、OSによって管理され、OSによって適用し、リリース。スペースを解放した後、フィールドガイドになることを避けるために、空白のポインタを必要と
公開された170元の記事 ウォンの賞賛207 ビュー459万+

おすすめ

転載: blog.csdn.net/xiaoting451292510/article/details/105094625