たつをの日記 - 1999年2月10日

学生さんのお部屋
郵便受けに「奈良先端科学技術大学院大学ご入学の皆さんへ」という賃貸住宅専門店のパンフレットが入っていた。 大学周辺の安めの物件が載っている。 当然、「寮の住民に配ってどうするつもり?」という疑問を感じた。 ちっちゃい紙片がパンフレットにはさっまていた。 曰く「前略、現在寮にお住いの学生さんで、寮を出なければならないという時に大変なのがお部屋探しです。 当社は<略>奈良先端科学技術大学院大学地域に精通しており、 奈良先端科学技術大学院大学へご通学される学生さんに良質なお部屋を ご提供できるように取り組んでおります。<以下略>」 つまり、新 M3、新 D4、 新 学振研究員などを対象にしているようですね。 なるほど、そう考えると、寮に配るのはなかなか良い方針です。 しっかりサーベイしてるみたいですね (^^)。 URL が書いてあったので載せておきます。来年お世話になるかもしれないし。

今日の作業
腰はだいぶ良くなったて、普通に歩けるようになった。 でも、油断は禁物。階段をタッタ、タッタとリズミカルに降りてたらグギっときた。

引続き、SUFARY vs ? の比較実験を行っています。 以下、知らない人には難しく見えるけど実はどうってことない話。 長年、Cでプログラムを組んでいるけど、今までメモリの確保に失敗するという事態に遭遇したことが無かった。 実際、WSでプログラム作るときに、malloc が失敗するなんてこと考えないし、 考えたとしても「malloc 失敗 → exit !」という一般的なコーディングだった。 今日、負荷実験ということで、同時に検索エンジンを数十個起動してたら、 メモリ確保(malloc)失敗が続出。これじゃちゃんと評価できない! 今までのコーディングはこんな感じ。

  hoge = (char *)malloc(HOGE_SIZE);
  if(hoge == NULL){
    fprintf(stderr,"allocation failed.\n");
    exit(1);
  }
メモリ確保ができないくらいで、あきらめて終了してしまちゃ困るわけ(困るのは負荷実験のときだけという話もあるけどね)。 そこでメモリ確保に失敗したら、1秒待ってもういちど挑戦というようにコーディングした。こんな感じ。
  while(1){
    hoge = (char *)malloc(HOGE_SIZE);
    if(hoge != NULL) break;
    sleep(1);
  }
待つ時間を増やしていく(倍にしていくとか)ようにしたほうが現実的かも。 どっかで聞いたことあるような話だね。 ともかく、これでなんとか動くようになって、実行時間の測定ができました。 良かった、良かった。 でも、メモリ確保できてなかったら sleep してるだけだから測定結果に意味あるのかなあという疑問も湧いてきます。 また、非常に危険なループなのでコンパイルの際に選択できるようにすべしとの意見もあります。まあ、そうだね。 で、売りもののプログラムではどうやってメモリ管理しているのかなあというのが疑問なのです。 比較対象のOT5(売りものです)は、 いくつ立ち上げても「メモリが足りない」なんて泣き事言わず各自黙々と働いているんだよな。偉いよなあ。