メモリの確保と解放
メモリとは
メモリとは画像や音楽データ、プログラムの変数などを保存するために
コンピュータが用意した保存領域のことです。
メモリは長期保存などには向いておらず、画像の表示や、音楽再生などの際に
データの一時的な保存場所として使用されています。
メモリの静的確保
変数や配列を宣言すると自動的にメモリ上に領域が確保されます。
このように自動でメモリを確保することを静的なメモリ確保といいます。
メリット
プログラマーが意識しなくてもいい
デメリット
自分で管理できないので大量のメモリを消費する場合などに
メモリの制御ができず、足りなくなる可能性がある
メモリの動的確保
静的確保とは逆にプログラム上で必要に応じてメモリを確保し、不要になったら
解放する方法のことを動的なメモリ確保といいます。
メリット
プログラマー側でメモリの確保、解放を管理できる
デメリット
管理の責任がプログラマー側にも発生するので、きちんと管理しないと
メモリの解放忘れなどの致命的なバグを引き起こす可能性がある
動的メモリの確保の方法
メモリを確保するためにはライブラリ関数のmalloc関数を使用します。
メモリの確保、解放関数には#include <stdlib.h>が必要です。
ソースの頭で#include <stdlib.h>の宣言を行ってください。
malloc関数書式
(void*) malloc(確保したいメモリのバイト数);
malloc関数具体例
int *p = NULL;
p = (int*)malloc(1024); // 1024バイトのメモリ確保
malloc関数仕様
malloc関数は引数に確保したいメモリのバイト数を指定します。
無事成功したら確保したメモリの先頭アドレスが返されます。
※1.void型のポインタは、どのポインタ型の変数にも
合わせることが可能な汎用性の高い型です。
※2.void型のポインタを使用するためには
キャストと呼ばれる手法を行う必要があります。
動的メモリの解放
動的メモリの解放にはfree関数を使用します。
free関数書式
void free(動的確保されたアドレスが格納されたポインタ変数);
free関数使用例
int *p = NULL;
p = (int*)malloc(1024); // 1024バイトのメモリ確保
free(p);
p = NULL; // 解放し終わったらNULLポインタで初期化する
free関数仕様
free関数はmallocで確保したアドレスが入ったポインタ型の変数を
引数で渡せば、そのメモリの解放を行ってくれます。