忘れないうちに staticな話

怪談話ではないですが、寝ようとしたら、頭の中を

かけめぐって、はなれなくなったテーマがあります。

忘れないうちに書き留めておきます。

いくつかの関連した話です。

私は、理解できないことに遭遇した場合、

これは、ほとんど未知との遭遇てきな話になります。

C言語は、よくNativeと表現されるときがあると思うのですが

昔、ファミコンの時代のゲームは、C言語ではなしに、

アセンブラーで組まれていました。

私は、どういうわけか、アセンブラーを教えてもらったことも

自分で、理解しようとも思ったことがなくて、

いきなり、フランス語に遭遇したようなことになります。

わからないので、一行一行コメントを打っていただいたことがあります。

お世話になりました。

なんと、プログラムを理解するのに、右のコメントをみて、

なるほど、そういうことか、わかった、全然わかっていない(笑)

いつまでたっても、ひとりだちできません。

ついに、きゅうそ猫をかむ事態となりました。

アセンブラーだから、わからない、よし、これを

C言語にしてしまえと、えーそんなことできるのか?

アセンブラーには、マクロアセンブラーといって,defineのような機能が

あります。なんとif()文とかかけるのですよ。

わかりやすう、ということで、C言語は、マシンに近いNativeな言語です。

それがどうしたのということですが

昨今の高級言語(抹茶ははいっていない)は、すべてクラスに覆われていて

main()関数はどこにあるの、こんなので、実体がどこにもないのに

動くわけがないと、でも、どうやって動くのと何年間か悩んだことが

あります、ずっと悩んでいると病気になるので、さいわいなことに

お酒を飲むと、健忘症にかかって、全部わすれてしまいます。

10年ぐらい、病気かということですが、どれくらいか経ってから

main()関数が、埋もれているということに気が付きました、

遅すぎた春がめぐってきました。

でも、どうやって、外にひきずりだすのと、ロープをかけて、ひっぱるのかと

staticとかかれていても、このおまじないの効果にまったく気がつきませんでした。

Javaは、その昔、古き良き時代、コンパイルして、リストを印刷すると

なんとC言語がでてきました、はーん、中身はC言語かと思いました、

思っただけです、ちっともわかってない(笑)

最近、staticの効果が身に染みてきました、腰のいたみによくきくみたいです、

サロンパスか(笑)

プログラムは、分割されて、オブジェクトごとに、Playerとかキノコとか

コンパイルされ、相対アドレスが割り振られます。

変数、定数はメモリに割り振られます。

他のプログラムから、ヒットはんていのために、キノコとのヒット判定とか

するときに、キノコはどこにあるのかということがわからないと

場所がわからないと、あたったかどうかわかりません。

すべて、つないで、ロードモジュールにして、ロードします。

メモリのどこかにロードされたら、やっと、プログラムに

メモリが割り当てられて、使えるようになります。

ただ、newとか、グローバル変数になると、少し話がかわってきて

ヒープという領域に、ロード後、メモリがわりあてられます。

つまり、ロード時には、プログラムの大きさ、目方みたいなもの

はわかっていますが、なんとロード後、プログラムがふくれあがります

ぷくーっと、風船ではありません(笑)

実行されるまでは、メモリが割り当てられないの、ここらへん曖昧です。

プログラムが稼働するまでに、エンジンをかけてから、全体

がスタンバイするのに、時間がかかります。

この忙しい時代、トーストにパンをいれながら、コーヒーにミルクを入れに

一階におりて、ついでに少し用事をして、あーそーだ

パンが真っ黒こげになりながら、洗濯があがって、キッチンの洗いを少しして

コーヒー飲みながら、洗濯ものをほしながら、はやく次のせんたくもの

あーコーヒーがさめながら、ベランダにあー鳥さんが大事なものを

わすれたり、おいて行ったり、後始末つう、電車の発車時間がせまってくる

最高記録は、洗濯しっぱなしででかけました、

もう家の中、整理している暇はない、ぐちゃぐちゃ

狼よ、さらばでしたか、あの中で主人公が、ソファでねながら、

部屋の中、ぐちゃぐちゃ、あんな雰囲気です、

あー財布、定期がない、カバンがない、ズボンさかさま、といれえ

やっと、全力疾走、えらーかばん軽い中身がはいってない、ああ

こんな忙しい現代において、ロード後ふくれあがるぷーっと餅みたい

即たべられる、インスタントラーメンでもお湯をかけて、3分末

お菓子は速攻たべられる、そうだ、袋にはいったラーメンはラーメンオブジェクトで

あって、まだたべられない、お湯をかけて、伸びたラーメんは

インスタンスこれだあと思いました、

インスタントラーメンがたべられる、つまりインスタンス化するのに時間がかかる

これですね

少しまわりくどくなりましたが、オブジェクトがインスタンス化するのに時間がかかるということです、これでえらい目にあいました、

初期化のエラーがでて、目がてんてん、あー夜があけてしまいましたあ、

世間は静かです、工事の音も、子供たちの声もカラスの声もなにも聞こえません

最近、耳がとうくなったせいですか(笑)

CPlayer g_player;

これは、playerオブジェクトですね

CPlayer* GetPlayer(){

   return &g_player;

}

これは、わたしもうすうすPlayerインスタンスのゲッターと

思っていました、ほんとか(笑)

なんとアドレスをゲットしているので、アドレスがわりふられるまでは

ゲットできない、これですね

やっと説明できました。

インスタントラーメンの袋、またはネットで見かける映像、かたろぐ

これがクラスです

クラスは、まだ実体がありません、

クラスからオブジェクトをつくると、初めてふくろに

かちかちのラーメンオブジェクトがはいります。

お湯をわかして、どんぶりにいれて、お湯をかけて、3分後

できたあ、ラーメンインスタンス

インスタントラーメンの話でした。

はい、こお遅延を解消するのが、staticです

クラスの中で、オブジェクトを書いて、ゲッターに

staticをつけると、なんとプログラムがロードされるときに

まっさきに、メモリーがわりあてられます、

即インスタント化じゃない、インスタンス化して

即たべらる、使える、遅延は一切なしということです。

この忙しい時代、超高速にロードしてくれるのがこの

staticというおまじないです、このお札をつけると

こわいものなし、というお話でした、キョンシーみたいに

モリーをのぞくと、でぼちんにお札をはって、ぴょんぴょんとんでいるのでしょうね

もういくつか、お話があったのですが