C++における静的領域、スタック領域、ヒープ領域の使い分け

C++におけるメモリ領域の使い分け方を説明します

目次

インスタンスを入力🐘

投稿日: 2023年9月27日

最終更新日: 2024年5月1日

静的領域

C++においてはstatic修飾子を付けることで、変数のアドレスをこの静的領域に配置できます。staticが付いたローカル変数は、プログラムの開始から終了まで利用できます。

スタック領域

スタック領域では、ヒープ領域よりも高速なキャッシュが利用されるので、ヒープ領域よりも高速にデータを扱えます。通常のローカル変数(自動変数)はスタック領域に格納され、関数の開始から終了まで利用できます。スタック領域内のメモリの確保と解放はコンパイラとOSによって自動的に行われるため、開発者がメモリの確保と解放を行うコードを記述する必要はありません。

ヒープ領域

メモリを動的に管理するために使用されます。ヒープのサイズはプログラムの実行時に動的に変化するため、開発者がメモリの確保と解放を行うコードを記述する必要があります。

new演算子、std::vectorクラスはこのヒープ領域を利用しています。ヒープ領域を利用することにより、配列の要素を動的に変化させることができます。

メモリリーク

new演算子でヒープ領域にメモリを確保した後に、delete演算子でそのメモリを解放しなかった場合はメモリリークという現象が発生します。メモリリークとは、コンピューターが使用できるメモリが徐々に減っていく現象です。動的に確保されたメモリが適切なタイミングで解放されないことによって発生します。大量のメモリリークが発生するとコンピューターがクラッシュすることもあるため、注意が必要です。

std::vectorクラスの場合は、new演算子によって動的にメモリが確保されますが、デストラクタによって自動でメモリが解放されるため、メモリリークが発生しません。