2023年9月27日
2024年5月1日
静的領域
C++においてはstatic
修飾子を付けることで、変数のアドレスをこの静的領域に配置できます。static
が付いたローカル変数は、プログラムの開始から終了まで利用できます。
スタック領域
スタック領域では、ヒープ領域よりも高速なキャッシュが利用されるので、ヒープ領域よりも高速にデータを扱えます。通常のローカル変数(自動変数)はスタック領域に格納され、関数の開始から終了まで利用できます。スタック領域内のメモリの確保と解放はコンパイラとOSによって自動的に行われるため、開発者がメモリの確保と解放を行うコードを記述する必要はありません。
ヒープ領域
メモリを動的に管理するために使用されます。ヒープのサイズはプログラムの実行時に動的に変化するため、開発者がメモリの確保と解放を行うコードを記述する必要があります。
new
演算子、std::vector
クラスはこのヒープ領域を利用しています。ヒープ領域を利用することにより、配列の要素を動的に変化させることができます。
メモリリーク
new
演算子でヒープ領域にメモリを確保した後に、delete
演算子でそのメモリを解放しなかった場合はメモリリークという現象が発生します。メモリリークとは、コンピューターが使用できるメモリが徐々に減っていく現象です。動的に確保されたメモリが適切なタイミングで解放されないことによって発生します。大量のメモリリークが発生するとコンピューターがクラッシュすることもあるため、注意が必要です。
std::vector
クラスの場合は、new
演算子によって動的にメモリが確保されますが、デストラクタによって自動でメモリが解放されるため、メモリリークが発生しません。