2007-09-24-01-16ビットコード参照の範囲外祭り - project-enigma

2007-09-24-01-16ビットコード参照の範囲外祭り

>> Site top >> weblog >> 月別アーカイブ >> 2007年09月のlog >> 2007-09-24-01-16ビットコード参照の範囲外祭り

最終更新日付:2014/01/01 13:39:49


16ビットコード参照の範囲外祭り

2007 年 09 月 24 日

さて、CashMemoDA のバージョンアップも済んだことだし、今日は丸一日メインストリームの開発を頑張りますよ...と。思ったら。

「 ○△×の□○△への16ビットコード参照が範囲外です 」

嗚呼、また出ました。隣家エラーでございます。もとい、リンカエラーです。隣家なんて顔も知らんちゅうねん。えぇ東京暮らしですともさ。疎結合どころか無結合もいいところです。

そんな話はいいんだ。数ヶ月前からコードを少し変更しただけで16ビットコード参照が範囲外になるという状況に悩まされている。C++ だし POL を使っているしで、とにかくコードの依存関係が複雑に絡んでいるのだ。しかも上記のようなリンカエラーの出力が、POL のコードに対して出されちゃうんだからどうしていいのかもわからない。結局はごちゃごちゃとセグメント内の配置をイジって運良く収まってくれるのを祈るしかないのだ。

今日もこれでかなりやる気を削がれた。しかし、最近になってわかってきたことが1つある。それは、クラスのデストラクタは省略しないほうが良いということだ。デストラクタでやることがない場合でも、省略するとオブジェクトを破壊 ── つまり局所オブジェクトがスコープを外れるタイミングやヒープ上のオブジェクトをクリア ── する個所で自動生成されたデストラクタが勝手な場所に配置され、 「 operator delete までが遠いんじゃぁ! 」 というリンカエラーが出る。憶測だし細かいことはわからないが、空っぽのデストラクタをきちんと宣言・定義してあげれば少なくともリンカエラーは1つ減る。

CodeWarrior のマニュアルを見ると、「 スマートコードモデル 」 なるものを使用すれば全ての呼び出しを32ビットコールにできるのだそうだ。しかし、マニュアルには「 コンパイラとリンカは32ビットジャンプをシミュレートするためにコードに多くの命令を追加する 」 とも書かれている。これはひとまずやらないようにしている。

さて、続きをやるか...

 

コメント

min - 09/24/2007 08:02:23 PM

なるほど、デストラクタを自動生成にまかさず空でも作る。非常に勉強になりました。

陰郎 - 09/27/2007 08:16:53 PM

> min さん

仕事では Solaris、自宅では Windows、Linux など、いろいろな環境でいろいろな C++ コンパイラを使っていますが、やはり C と違って細かいところで通らないことが多いんですよね。C++ は C と比べてもコンパイラの仕事が非常に多いですし、ISO 標準から 10 年といってもまだまだコンパイラの挙動にはばらつきがあります。

しかし、それでも C++ の方がいいなぁと思うのは、今やっている昼間の仕事が pure C なんですよ。表現力や抽象化能力が全然違うので、デザイン面で非常に苦労しています。とはいえ、C++ を存分に使えるようなプロジェクトは少ないですからねぇ...

このページにコメントする

 

このページのタグ

Page tag : Palm

 

 


Copyright(C) 2005-2017 project-enigma.
Generated by CL-PREFAB.