\r\n\r\n
プログラミングでは、計算データを保存しておく必要がある。このデータはメモリーに保存されます。コンピュータプログラミングにおいて、データを格納するためのメモリを変数と呼びます。変数には特定のデータ型があります。そのため、プログラムを実行するためのメモリが確保される。メモリは2つの方法で割り当てることができます。静的メモリ割り当てと動的メモリ割り当てである。一度変更したメモリ割り当ては、変更することができません。メモリは再利用できない。しかし、動的メモリ割り当てでは、一度割り当てたメモリは変更することができます。静的メモリ割り当てと動的メモリ割り当ての大きな違いは、静的メモリ割り当てでは一度割り当てたメモリのサイズは固定であるのに対し、動的メモリ割り当てでは一度割り当てたメモリのサイズは変更可能である点です。
1. 概要と主な違い 2. 静的メモリ割り当てとは 3. 動的メモリ割り当てとは 4. 静的メモリ割り当てと動的メモリ割り当ての類似点 5. 横並びの比較 - 静的メモリ割り当てと動的メモリ割り当ての表形式 6. まとめ
静的メモリ割り当てでは、割り当てられるメモリは固定されています。一度割り当てたメモリは、変更できません。メモリーの増減はできません。例えばC言語では、プログラマーがintxと書けば、その変数が整数値を格納できることを意味する。バイト数はコンピュータに依存します。e. intx[5]; この x は、同じ型のデータの並びを格納できる配列である。5つの整数要素を格納することができます。5つ以上の要素を格納することはできません。Javaでは、intarr[]=new int[5]のように配列を作成します。配列 "arr "には5つの整数値を格納できますが、それ以上の値は格納できません。
図01:メモリ割り当て方法
静的メモリ割り当てでは、一度割り当てられた変数は永久に残ります。最初に割り当てた後、プログラマーはメモリサイズを調整することができません。プログラマーが10個の要素を格納できる配列を割り当てた場合、指定された数以上の値を格納することはできません。もしプログラマーが最初に10個の要素を格納できる配列を割り当てたとしても、必要なのは5個だけなら、そのメモリは無駄になります。メモリが不要になったが、メモリを再利用することもできない。静的なメモリ確保は固定ですが、実装はシンプルで簡単、かつ高速に行えます。
時には、メモリのサイズを変更する必要があります。そのため、メモリを動的に割り当てることができる。データ要素の**や削除によって、メモリは増えたり減ったりします。これを動的メモリ割り当てという。
C言語のヘッダーファイルstdlib.hには、動的メモリ割り当てのための関数が4つ用意されています。関数 malloc() は必要なバイト数を確保し、確保したメモリの先頭バイトへの NULL ポインタを返します。calloc()関数は、必要なサイズのバイトを確保し、0に初期化する。free()関数は、割り当てられたメモリを再割り当てするために使用されます。reallocと関数は、以前に割り当てられたメモリを変更することができます。callocやmallocでメモリを確保した後、メモリサイズは固定されるが、realloc関数を使って増減することができる。Javaでは、動的なメモリ割り当てのためにコレクションを使用することができます。
動的メモリ割り当ての主な利点は、メモリを節約できることです。プログラマーは必要に応じてメモリを確保したり、解放したりすることができます。メモリは実行中に再割り当てすることができ、不要になったら解放することができる。また、静的なメモリ割り当てよりも動的なメモリ割り当ての方が効率的です。デメリットとしては、動的メモリ割り当ての実装が複雑であることが挙げられます。
静的および動的メモリ割り当て | |
静的メモリ割り当てとは、一度割り当てたメモリは固定される方式です。 | 動的メモリ割り当てとは、一度割り当てたメモリを変更できるようにする方法です。 |
修正内容 | |
静的メモリ割り当てでは、最初の割り当て後にサイズを変更することはできません。 | 動的メモリ割り当てでは、それに応じてメモリを最小化または最大化することができます。 |
インプリメンテーション | |
静的メモリ割り当ての実装は容易である。 | 動的メモリ割り当ての実装は複雑である。 |
スピード | |
静的メモリでは、動的メモリよりも高速にアロケーションが実行されます。 | メモリ割り当てが動的メモリ割り当てより遅い。 |
メモリ使用量 | |
静的メモリ割り当てでは、未使用のメモリは再利用できません。 | プログラマーは、必要な時にさらにメモリを確保し、必要な時にメモリを解放することができる。 |
プログラミングでは、静的メモリ割り当てと動的メモリ割り当ての2つのメモリ割り当て機構があります。静的メモリ割り当てと動的メモリ割り当ての違いは、静的メモリ割り当てでは一度割り当てたメモリサイズは固定であるのに対し、動的メモリ割り当てでは一度割り当てたメモリサイズを変更することができる点です。プログラマーは、アプリケーションに応じて、メモリをスタティックにするかダイナミックにするかを決めることができます。
本記事のPDF版をダウンロードし、オフラインで使用する場合は、引用の指示に従ってください。PDF版のダウンロードはこちら:静的メモリ割り当てと動的メモリ割り当ての違いについて