C/C++
sizeof(int)が8じゃないなんて!
2011-05-27(金)はじめての64bitプログラム。
C言語やってる人ならまず表示してみたくなるであろう、sizeof(int)
ところが、実行する前からWindowsでは期待値の8=(64bit)にはならないことが分かってしまいました。
どうやら、64bitマシンといっても環境依存という。LP64/LLP64/ILP64というデータモデルがあるそうな。
Windowsだと、LLP64でintもlongも32bit. ポインタ,size_t型が64bitとのこと。
int型は処理系依存というイメージが強いので、Z80→8086→i386とCPUのビット数に応じてintのサイズが変わってきたのを考えると、64bitOSなのにintが32bitというのはなんとも気持ち悪いものがあります。
なんか、せこいぞっ!もっとドーンと64bit使っちゃえや!って気が。
と気落ちしたところで、いちお初めての64bitプログラム作りました。
メインのWindows 7 環境は汚したくないので、VMware上のXP modeにVisual C++ Express 2010と、Windows SDK (64bitクロスコンパイラ) をインストール.
http://msdn.microsoft.com/ja-jp/library/9yb4317s.aspx
あと、プラットフォームツールセットをv100からWindows SDKに変更。
最後に、コード生成のランタイムライブラリを/MT(静的リンク) に。これないと、Visual C++を入れていないマシンで実行するとランタイムエラーになります。
■実行結果
D:\temp>test64bit.exe
sizeof(int)=4
sizeof(long)=4
sizeof(char*)=8
sizeof(size_t)=8
0x13f621001 ← ポインタの値
ぉぉおおお!確かにポインタの値が32bit越えてる!(33bitだけど)
いや、ただそれだけなんですけど。
Visual C++ 2010 Expressは使い辛いなぁ
2011-05-02(月)次の仕事でC++を使うことになったので急遽お勉強。
経験ないわけじゃないんだけど、だいぶ実戦から離れてるからなぁ。
というわけでVisual C++ 2010 Expressを入れてみたんですが、なんかC++というには違和感アリアリで、まったく別の言語みたい。
それもそのはず、C++/CLIとかなんとかでMicrosoft拡張言語っぽい。こんなの組み込みでは使わねーよ、と思いつつ、教科書にありきたりなプログラム組んでも面白くもなんともないので、GUIアプリを作るために我慢して使ってみました。
それにしても、同じVisual Studio Expressなのに、C# と比べるとこの操作性の悪さはなんでしょう。
特にインテリセンスがまったく利かないのには参りました。まあ、フリーだから文句言えないけど。
あと、C++/CLIの^(ハット)記号はどうしても馴染めない。^ と -> だらけのプログラムを見ると、やっぱりC# が洗練されて見えますね。これってPerlの$の多さからRubyが綺麗に見える感覚と一緒です。
ただ、.NET Framework だとどの言語で組んでもまあそんなに変わらない、というのはC++を使ってみて初めて感じました。
とりあえず、手始めに昔買った「PC-9800シリーズ3Dスーパーグラフィクス」という本についていたBASICのサンプルプログラムを移植してみましたけど、これが四苦八苦。
移植するってのは、言語を身につけるのに実践的でなかなか良い方法ではないかと思います。なにより、動かしてみて楽しいしね。これ大事です。書籍のサンプルプログラムって面白くないですもん。これじゃ身につかない。
予想されたことですが、PC-9801のBASIC時代と比べ、ケタ違いの速度。今はPCの性能を持て余していてフルに使うことが難しい。
はみ出しコーナーして書かれていた50行足らずのBASICプログラムをC++に移植してみました。もう25年も前の書籍です

