スマートフォン用の表示で見る

malloc

コンピュータ

malloc

えむあろっく

メモリ(Memory)をアロケート(Allocate:確保)するための関数のこと指す。

C言語においては動的にメモリ領域を(ヒープ内に)確保するライブラリ関数としてstdlib.hで宣言されています。

※動的メモリ確保の取り扱いはC言語において一つの「壁」とされています。

理由は確保したメモリ領域は(基本的には)必ずfree()で解放する必要があり、free()を忘れた場合、プログラムがメモリを使い果たしてしまい異常終了する、という事態が発生してしまうためです。

free()をせずに、malloc()したメモリ領域へのポインタへ別のアドレスを代入してしまうと、

元のメモリ領域にアクセスする手段は失われ、プログラムが終了するまで残り続けます。これをメモリリークと呼びます。

そのため、下記のような事象がC言語を使うプログラマの頭を悩ませることになります。

  • どのポインタの指すメモリ領域が不要なのかの判断
  • あるポインタの指すメモリ領域がいつ不要になるかの判断
  • あるポインタが指すメモリ領域はmalloc()で確保済みかどうかの判断
  • あるポインタが指すメモリ領域はfree()で開放済みかどうかの判断

C++においてもこの問題が同じように起きますが,そちらでは演算子newを使うことが一般的となっており、こちらの手法をとるとメモリリークを防ぐことができます。

また、Java, C#, Lisp, Perl, Ruby, Pythonといった言語では、動的に確保したメモリ領域の開放を自動化するGarbage Collectionガベージコレクション:ごみ集めという意味。そこから転じて不要となったメモリを自動化する機能のことを指します。略称GC)を持っているため、プログラミングが(一般的には)非常にやり易いとされています。


なお、C/C++でもBoehmのGCライブラリ*1を使用すればGCを使用できる。しかしながらBoehmのGCは大きなメモリ領域を扱う場合、速度的に問題があるとの事だ。*2