昨日、水分を取り忘れていたらしく二日酔い寸前のような状態になりました。こりゃダルいっす。
先日のテンプレートクラスの続きです。テンプレートはマクロみたいなもので、オブジェクトの宣言時にインスタンス化されます。先日の例だとb.cppではBのクラスを宣言していないので、b.oに何もコードが出力されません。a.cppではBを宣言していますが、a.cppでインクルードしているb.hにはコードがかかれていないので、結局Bのインスタンス化はされません。Cはコードが書いてあるのでインスタンス化されます。
ヘッダにコードを全て書いてしまうか、それは汚いから嫌、どうしてもコードとヘッダを分離したいとなれば、明示的にテンプレートクラスを具現化してやらなければいけません。b.cppの先頭に、
template class vector<int *>;
このように明示的にインスタンス化を行わないと、リンカでコケます。ま、こんなことしたら全然テンプレートの意味ないんですけどねー!!はっはっは。あー使えねー。
新年会に行きました。丸茂に行ったらちょうど買い物が終わったところで、すれ違いでした。寂しくハンバーガーを買っていたら塚田氏が来て、でも彼は車だからまた別れて、またもすれ違いでした。
飲み会の途中から始まった百人一首には参加せず、横で話していたら静かにしてくださいと言われ、えー?飲み会なのにーと思ったり思わなかったり。そういえばあの本かなりイカしてる本だったなあ。
研究室にてバグ取りをしました。スレッドが立ち上がる前に終了させると、今まで溜まっていたリクエストを無理やり空にしてしまう仕様にしていたためでした。とりあえず動いているようですし、解決できたかな。
テンプレートクラスに手を出してみたところ、変なエラーが出てきてリンクできません。他のオブジェクトにテンプレート関数があり、インラインコンストラクタではない場合(サンプルで言うとclass B<T>)、コンストラクタへの参照が解決できない、とかリンカがほざいてリンクしません。Aへの参照は解決しているくせに…なぜ。
#include "b.h"
template <class T> class A {
public:
A(void);
virtual ~A(void);
};
template <class T>
A<T>::A(void) {}
template <class T>
A<T>::~A(void) {}
int main()
{
A<int *> a;
B<int *> b;
C<int *> c;
return 0;
}
template <class T> class B {
public:
B(void);
virtual ~B(void);
};
template <class T> class C {
public:
C(void) {};
virtual ~C(void) {};
};
#include "b.h"
template <class T>
B<T>::B(void) {}
template <class T>
B<T>::~B(void) {}
コンパイルの結果はこんなかんじ。
$ g++ -c b.cpp a.cpp $ g++ b.o a.o a.o: In function `main': a.o(.text+0x1d): undefined reference to `B<int *>::B(void)' a.o(.text+0x4e): undefined reference to `B<int *>::~B(void)' a.o(.text+0xaf): undefined reference to `B<int *>::~B(void)' collect2: ld returned 1 exit status
卒論のテーマ決めをしました。長引くのかなあ、と思っていたら結構あっさりでした。
Keep-Aliveな転送の実験を研究室でしていたら、やたら転送が不安定になったりならなかったり…。色々条件を変えて実験してみたところ、どうやらスイッチングハブが原因のようです。ギガビット用のスイッチでも、5ノードが一気に通信し始めると転送が間に合わなくなるようで、完全に盲点でした。
旧PCを復活させるためのマザーとCPUが届きました。ちゃっちゃと組み立てて、Windowsやらその他のアプリケーションやらを再インストール。HDDが若干足を引っ張っている感じはしますが、以前より軽快な動作です。
卒論がちょっと進展して、やっとKeep-Aliveな転送ができました。思いがけない大改装になってしまいました。もしかすると元の設計が限界に来ているのかもしれません。でも書き直すとか有り得ないんで、このままつぎはぎで頑張るしかないです。
明日は卒論のテーマ決めですが、テーマのいい案が考えつかないなあ…。
ストーブがあるのに灯油がないそうで、大下さんとジョイ本に灯油を買いに行きました。ジョイ本の灯油44円/Lはかなり安いことに後で気づきました。近くのスタンドは軒並み48円/Lでしたよ。
研究室に行ったら、なんかすごい久しぶりに見た、と言われました。研究室には行かなかったけど、一応頑張ってますんで。ま、この間のゼミはすっかり忘れてましたけどー。
家に帰ってきて洗濯物を洗濯機から出すのを忘れていたことに気づき、洗濯物がうんぬんより、入れたことを忘れていた事実にショック…。
じょーの家で桃鉄USAやってたら寝てしまい、朝になっていました。朝日が目に染みる。
なんだ、お茶碗三杯程度って、よくわかんないな?まあいいや、適当に2合半くらいで足りるだろ。
…って思ったのが悪かったね、やっぱり適当は良くないと思いました。明らかに規定量の1.5倍はある。
Wordは使いづらいですねー、文章の先頭を「勝手に」大文字にする、@ が一文字でもあれば「勝手に」ハイパーリンク化する、英語の常識と思われる修正候補を「無理やり」日本語に適用してくる、おせっかいもいい加減にして欲しいものです。
この邪魔者はオートコレクトというんですが、唯一の救いはオートコレクトをOFFにできることでしょうね。Wordにイラついている方は、とりあえず全部外して使ってみてはいかが?だいぶすっきりしますよ。
旧PC(DDR266)をデュアルチャンネルで粘らせると4.2GB/sとなって、まだまだ現役ですよってことが言いたかっただけなんですが、表がでかくなりました。
メモリは転送速度だけではありません。ま、速いに越したことは無いです、きっと。よく調べなかったせいで、表が穴だらけになってしまいました。詳しい方、足りない部分を教えてください…。
チップ(メモリモジュール) | バス幅、クロック | 最大転送速度(大体) |
---|---|---|
DDR SDRAM | ||
DDR200(PC1600) | 64bit, 100MHz | 1.6GB/s |
DDR266(PC2100) | 64bit, 133MHz | 2.1GB/s |
DDR333(PC2700) | 64bit, 166MHz | 2.7GB/s |
DDR400(PC3200) | 64bit, 200MHz | 3.2GB/s |
DDR2 SDRAM | ||
DDR2-533(PC2-4300) | bit, MHz | 4.3GB/s? |
おまけにもうひとつ。
チップ(メモリモジュール) | バス幅、クロック | 最大転送速度(大体) |
---|---|---|
SDRAM | ||
PC66 | 64bit, 66MHz | 528MB/s |
PC100 | 64bit, 100MHz | 800MB/s |
PC133 | 64bit, 133MHz | 1064MB/s |
DRDRAM | ||
PC600 | 16bit, MHz | 1.2GB/s |
PC700 | 16bit, MHz | 1.4GB/s |
PC800(RIMM1600) | 16bit, MHz | 1.6GB/s |
PC1066(RIMM2100) | 16bit, MHz | 2.1GB/s |
PC1066(RIMM4200) | 32bit, MHz | 4.2GB/s |
glibcに安全でない一時ファイルの使用があってパッチが当たったんですが、当方Debianのため、apt-get update, apt-get upgradeってやったらあっさりglibcが入れ替わりました。なんだこれ、Debianすげえよ。
友達とバスの話をしながらざっと調べたデータ(下の表)です。いやー、ISA遅いなあ。昔はCバスに増設メモリ刺したものですが、今考えるとぞっとする遅さですね。PCI-Expressの登場によりPCIも過去の物になりつつあります。時代の流れですね。技術者を自負するならばぼけっとせず全力で付いていかねば!
ちなみにデータが間違っていても、責任は取れません。教えていただければ直しますが、あしからず。
バスの名前 | 最大転送速度(大体) |
---|---|
ISAバス | 8MB/s |
Cバス(PC98xxシリーズ) | 10MB/s |
PCI(32bit, 33MHz) | 133MB/s |
PCI(64bit, 66MHz) | 533MB/s |
PCI-X(サーバ用、64bit, 133MHz) | 1.06GB/s |
AGP | 266MB/s(x1)〜2.13GB/s(x8) |
PCI-Express | 320MB/s(x1)〜5GB/s(x16) |
起きたら9時だったので、もう一眠り、と思ったら16時でした。引越し手伝うよとか言ってて、このざまです。メール見て凹みました。って、今日ゼミと研究室見学があったのか。そういえばメールが来てたなあ…。なんだか今日は色々ダメです。どうしたんだろう。
なんとなく悔しいから卒論進めまくることにしました。気合入れてフック機構を作り直し、塚田氏の要求に応えうるものができました。あとはKeep-Aliveな転送を作れば、実験に移れるはず。
豆知識。手袋より首周りを暖めるマフラーの方が、手を温める効果が高いそうです。手袋はキーが打てないから助かります。早速実践していますが、部屋が寒すぎて意味がありませんでした。春先にまたやってみます。
塚田氏がヤフオクで落としたランプを取りに(無駄に)二台で行きました。解体屋だというから工場かと思ったら、普通の平屋です。工場は遠くにあるそうです。また遊びに来てよーと言ってました。きさくなおっさんです。その後、旧PC修理用のパーツ代を払って、研究室に行きました。
研究室では設定を頼まれたスイッチをいじって、こんなもんかーと遊んでいました。PCから802.1Q VLANのタグ付きパケットをどうやって流すんだかわかりません。
夕方、かもめガスの人が来て給湯器を修理してくれました。直って湯が出て幸せなんですが、原因が良くわからないままなので再発がちょっと不安です。修理の人は誤作動防止策として、警報機との連携部分(昔使っていたらしい、今は使ってない)を切ってくれました。あと、ガスのメーターは耐震装置が入ってるからうっかり叩かないでください、とのことでした。
昨日の晩から湯が出ません。今日も出ません。しかも今日は休日です。明日修理してくれるか聞かないと…。
給油して洗車して新しいグラフィックカードを買いました。RADEON 9200SEチップでGIGABYTE製、要は安物です。ファンレスだと思ったら、ケーズの店員がファンつきを箱に入れていました。まあいいや、交換面倒くせーし。
じょーの誕生会をしました。会話がどこかずれたような変な雰囲気でした。
(左)コンデンサ破損1 (右)コンデンサ破損2
旧PCのマザーボードが逝きました。壊れたのはLelonの電解コンデンサのみで、少なくとも4つは吹っ飛んでました。ネットではLelonは粗悪品、のような記述も見受けられます。まあ安物マザーの割に2年もったんだからまだマシでしょうか。PCの調子がおかしいときは、コンデンサをチェックしてみると良いかもしれません。
写真は壊れたコンデンサです。コンデンサが膨らみ蓋が割れて、中の電解液らしきものが漏れて固まっています。左の写真の、左側のコンデンサ(おそらく壊れていない)と比べるとわかりやすいかと思います。
< | 2005 | > | ||||
<< | < | 01 | > | >> | ||
日 | 月 | 火 | 水 | 木 | 金 | 土 |
- | - | - | - | - | - | 1 |
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 | - | - | - | - | - |
合計:
本日: