Out of Memory

本ブログは更新を停止しました。Aerieをよろしくお願いいたします。

目次

Blog 利用状況

ニュース

2009年3月31日
更新を停止しました。引き続きAerieを御愛顧くださいませ。
2009年2月3日
原則としてコメント受付を停止しました。コメントはAerieまでお願いいたします。
詳細は2月3日のエントリをご覧ください。
2008年7月1日
Microsoft MVP for Developer Tools - Visual C++ を再受賞しました。
2008年2月某日
MVPアワードがVisual C++に変更になりました。
2007年10月23日
blogタイトルを変更しました。
2007年7月1日
Microsoft MVP for Windows - SDKを受賞しました!
2007年6月20日
スキル「ニュース欄ハック」を覚えた!
2006年12月14日
記念すべき初エントリ
2006年12月3日
わんくま同盟に加盟しました。

カレンダー

中の人

αετο? / aetos / あえとす

シャノン? 誰それ。

顔写真

埼玉を馬鹿にする奴は俺が許さん。

基本的に知ったかぶり。興味を持った技術に手を出して、ちょっと齧りはするものの、それを応用して何か形にするまでは及ばずに飽きて放り出す人。

書庫

日記カテゴリ

カイホウ?

コーディング奇約 #02 -動きを理解して決めていますか?-
「開放」と「解放」はどちらを使うのか?

プログラミング用語としての「カイホウ」は、「開放」と「解放」と、どっちが正しいんだろう、という話。

英語の「free」も「release」も、ともに対応する日本語は「解放」らしいです。
じゃあ「解放」だろうって? 本当にそうなんだろうか?

「解放」は、ある場所に縛られているものの束縛を解いて、自由に動けるようにすることです。
「開放」は、ある場所を広く開け放って、他のものがそこに入れるようにすることです。
ちなみに、「開放」の英語は「open」のようです。

メモリの「カイホウ」はどうでしょうか。実は、Windows のメモリは、どちらの挙動も行います。
Windows APIには、Alloc / Free 関数と、Lock / Unlock 関数があります。GlobalFree と GlobalUnlock、HeapFree と HeapUnlock、VirtualLock と VirtualUnlock。

余談ですが、面白いことに、それぞれの「Unlock」の意味はどれも違います。

  • GlobalUnlock は、メモリアドレスの束縛を解いて、メモリブロックを移動可能にすること。
  • HeapUnlock は、ヒープメモリブロックではなくヒープのロックを解いて、そのヒープに対するメモリの割り当て / カイホウを許可すること。
  • VirtualUnlock は、その仮想メモリページがページングファイルにスワップアウトされるのを許可すること。

閑話休題。

メモリの Free は、個人的には「開放」の方が近いように思えるのです。しかし、「解放」でも間違いではないかも…と思います。

「開放」の場合、開け放つのは場所ですから、あるメモリアドレスです。一方「解放」の場合は、そのアドレスに存在するオブジェクトを解放するわけです。
この操作は表裏一体で、まずその場所を占めているオブジェクトを「解放」しなければ、その場所自体を「開放」することができません。
しかし、解放されたオブジェクトは、どこかへフラフラ移動してしまうのではなく、そのまま消えてしまいます。地縛霊が成仏するみたいですね(なんという例えか!)。

言葉の違和感は、コンピュータと現実との相違から生まれているようにも思います。
人間は、何かに束縛されているとき、解放されると自由になります。人間が自由であるべきかどうかというのは哲学的に難しい問題なので置いといて、人間には「束縛された状態」と「解放された状態」の2つがあるわけです。
しかし、メモリ上のオブジェクトにはそれがありません。オブジェクトはメモリを離れて存在することはできません。自由な状態がないがために、「解放」という言葉に違和感を感じるわけです。
が、「自由であること」と「束縛されていないこと」はイコールではないと考えれば、直感的ではないものの、納得できないことではありません。

メモリの「カイホウ」が「解放」か「開放」かは、どちらでも間違いではないような気がします。少なくとも、Windows API を使って、まずメモリを確保し、その上にオブジェクトを構築するという手段では。
ただし、生のメモリブロックの確保を意識しない、ガベージコレクタを備えた言語の文脈では、明らかに「解放」が正解です。その場合、プログラマはオブジェクトを「解放」することはあっても、メモリを「開放」することはないからです。

2つ目の余談となりますが、「開放」の訳語が「open」であるというのもなかなか新鮮です。
プログラミングにおける「open」とは、一般的に、「占有的に利用するために開く」場合が多いからですね。

投稿日時 : 2007年9月10日 11:45

Feedback

# re: カイホウ? 2007/09/10 12:42 ちゃっぴ

視点をどちらに置くかの違いでしかないと思います。

OS level で考えれば開放。
Application level で考えれば解放かと。

通常の application は OS の上で動作するので、解放でいいんじゃないですか?

# re: カイホウ? 2007/09/10 13:07 凪瀬

「開放」するのはポートかなぁ。

# re: カイホウ? 2007/09/10 14:09 επιστημη

んー...
使役すべく人質にしてたリソースを自由にしてあげるってーニュアンスなら"解放"か。

# re: カイホウ? 2007/09/10 16:25 Chuki

>「開放」の訳語が「open」であるというのもなかなか新鮮です。

「彼はオープンな性格だ」≒「彼は開放的な性格だ」かも

>メモリの Free は、個人的には「開放」の方が近いように思えるのです。
少なくとも割り当て(Allocate)たら解放(free)してやるんだ、と思うんですが。開放って言ってしまうと、他から共有できる印象を与えてしまうのでよくないかと。解放とちがい、開放には別れの意思表示はないと感じます。

# re: カイホウ? 2007/09/27 3:44 稍丼

> メモリの「カイホウ」が「解放」か「開放」かは、
> どちらでも間違いではないような気がします。

その感覚は,
ヒープ は,free するけど,
メモリ は,reclaim するからでしょう。
reclaim は,カイホウ ではないですからね。

メモリを カイホウ する という認識から始まるわけで,
英語を母国語にするプログラマと
最初から違ってしまっているようで,
なんかハンデがあるなぁ~。

# 月間ページビュー 2007年9月 2008/04/20 20:55 Out of Memory

月間ページビュー 2007年9月

タイトル  
名前  
Url
コメント