(toppers-users 1862) Re: Sh3(SH7729R)での開発環境(初心者)

高木信尚 takagi-n @ biggie.jp
2005年 1月 29日 (土) 08:52:54 JST


まつぞの様

> すみません、「内部結合オブジェクト」とは何でしょうか?

文字通り「内部結合をもつ識別子が表すオブジェクト」のことです。
(JIS X3010:2003における6.2.2 識別子の結合を参照してください)
具体的には、ファイル有効範囲で、static記憶クラス指定子を付けて宣言
されたオブジェクトのことになります。

今回の場合、
static const UW _checker_magic_number = 0x01234567;
ではstaticが付いているので内部結合、
const UW _checker_magic_number = 0x01234567;
ではstaticがないので外部結合になります。

> # google で検索してもなにも引っかからなかったので

「内部結合 C言語」あたりで検索していただけると、引っかかるはずです。

> 文脈から推測すると、UW _checker_magic_number のことのように
> 思うのですが、この変数の使用/未使用の判断はコンパイル単位では
> 判断できず、リンク時にしか判断できないような気がするのですが、
> いかがでしょうか?

内部結合の場合、その識別子を用いてアクセスできるのは同じ翻訳単位
に限られますから、コンパイル時に使用/未使用の判断が可能です。

> リンカが判断する場合、ld は gcc ではなく binutils に含まれるので
> binutils のバージョンが問題になるのではないでしょうか?

前述の通り、内部結合のオブジェクトの使用/未使用はコンパイル時に
判断されますから、gcc-3.4.xの最適化によって、アセンブラにかけられる
時点で既にシンボルも実体もなくなっています。したがって、Binutilsとは
関係ありません。

------------
高木信尚