今回は、技術的な話題というより、むしろ国語に関する話題です。タイトルに示したように、最近は「メモリを開放」という表現を、ネット上だけでなく書籍でも非常に多く見かけます。しかし、mallocで割り付けたメモリブロックに対してfreeを用いて行うのは「メモリの解放」であり、「メモリの開放」ではありません。

言葉の意味をよく考えてみていただきたいのですが、「解放」というのは「解き放つ」の意味で、freeやreleaseの訳語として用いられるのはこちらです。一方、「開放」というのは「開け放つ」の意味で、open the doorを「ドアを開放する」すると訳すように、「出入りを自由にする」場合に使います。

ちなみに、「解放する」の訳語があてられるのはfreeやrelease以外にもあって、liberateは「女性解放」や「民族解放」の場合に使います。また、emancipateは「奴隷解放」の場合に使います。

では、「メモリを開放する」という表現が常に間違いかというとそんなことはありません。例えば、メモリを他のプロセスや他のハードウェアなどから自由にアクセスできるようにする場合には、「メモリを開放する」と表現すべきです。ちょうど、「門戸開放」とか「校庭開放」などと同じイメージです。

ところで、Googleで「メモリ 解放」を検索すると、以前は「もしかして:メモリ 開放」が出てきていました。ひどいミスリードをやっていたものです。最近はどうやらそんなことはなくなったようです。

最後に、JIS X3010:2003の「7.20.3.2 free関数」から引用します。

機能 free関数は,ptrが指す領域を解放し,その後の割付けに使用できるようにする。