【3分解説】メモリ管理とは?

こんちには。キノコードです。
このレッスンでは、 メモリ管理について説明をします。

▼ YouTube動画はこちらからどうぞ。

まず、メモリについて説明します。
メモリとは、メインメモリのことで、CPUがプログラムを実行するときに使う記憶装置のことです。
このメモリは、私たちが普段使っているパソコンやスマホなど、ほとんど全てのコンピュータに内蔵されています。
コンピュータがプログラムを実行したときに使用するデータの多くは、メモリに格納されます。
ちなみに、CPUとは、マウス、キーボード、ハードディスクなどからデータを受け取り、演算などを行う装置のことです。

メモリ管理

メモリ管理とは、データを格納するために必要な「メモリ領域」を割り当てたり、不要になったデータが占拠しているメモリ領域を解放したりすることを指します。
なぜメモリ管理が必要なのでしょうか?
メモリには容量の上限があるので、効率よく使うためにメモリを管理する必要があるからです。
例えば、プログラミングでは、変数を使用する場合にメモリを確保し、変数を使い終わったらメモリを解放します。
確保したメモリは、ソースコードで明示的に開放する必要があるプログラミング言語があり、解放し忘れると使えるメモリが少なくなります。
メモリが少なくなると、新しく変数を使いたい場合にメモリを割り当てられなくなり、エラーの原因になります。
C言語の場合、メモリ領域の確保は malloc() 関数(マロック関数)を使い、メモリ領域を解放するときは free() 関数を使います。
メモリ管理について知っておくと、プログラミング中にメモリ関連のバグがあったとき対処しやすくなったり、プログラムを高速化するときに役立ちます。

メモリリーク

メモリ管理をする上で、気をつけなければならないことが2つあります。
メモリリークと二重解放です。
メモリリークとは、確保したメモリ領域が解放されず、メモリが確保されたままになってしまうことです。
C言語で言うと、malloc() でメモリ領域を確保し、 free() でメモリ領域を解放し忘てしまった場合が挙げられます。
メモリリークが続き、メモリ領域が確保できなくなると、プログラムがエラーを起こしたり、強制終了するなどの危険があります。

二重解放

二重解放とは、一度解放したメモリ領域をもう一度解放してしまうことです。
C言語で言うと、 free() で領域を解放したあと、もう一度同じデータに対して free() を実行してしまった場合が挙げられます。
二重解放してしまうと、メモリ内のデータが消えてしまい、予期せぬことやエラーが発生したりします。
また、フリーズしたり、強制終了するなどの危険があります。
メモリの管理には、ガベージコレクションという機能があります。
これは、メモリ領域の解放をコンピュータが自動でやってくれる機能です。
ガベージコレクションを使うことで、二重解放を回避することができます。
また、メモリリークに関してもメモリ領域の解放し忘れなどが無くなります。
ガベージコネクションは、メモリを安全に管理できるメリットがあるので、ほとんどのプログラミング言語で標準装備となっています。
一方、C、C++、Rustなどの言語では、ガベージコレクションを採用していません。

KinoCode チャンネル

YouTubeで毎日動画配信しています。
動画は3分間なので、
 ・通勤時間
 ・お昼休み
 ・お手すきのとき
 ・寝る前
など手軽に視聴できます。
 
ちょっとしたインプットにどうぞ!
 
▼チャンネル登録はこちらからどうぞ。