- ベストアンサー
ラベルのアドレスを知る方法は有りますか
プログラムの大きさを測って表示するため、次のようなプログラムを実験しました。 しかしエラーになります。 L1,L2 のラベルの値を知る方法は有るのでしょうか。 void *SIZE ; L1: 測定したいプログラム L2: SIZE = L2 - L1 ;
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
ないです。 仮にあったとしても目的とするプログラム部分の大きさになるとも限りませんし。
その他の回答 (4)
- colder
- ベストアンサー率43% (30/69)
GCCの拡張機能にあります。 void *lv1,*lv2; size_t size; L1: 測定したいプログラム L2: lv1 = &&L1; lv2 = &&L2; size = lv2-lv1;
補足
回答有難う御座います。 自分のコンパイラで試すと lv1 = &&L1; の部分に次のエラーが出てしまいます。 C2500 (E) Illegal token "&&" lv1 = L1; とすると、 C2225 (E) Undeclared name "L1" と言うエラーになります。 アセンブラのラベルをC言語で呼び出したらどうかと思い、 次のようにしましたが、C2225 (E) Undeclared name "L3" と成り、同じでした。 #pragma asm .EXPORT L3 L3: #pragma endasm lv1 = L3;
- notnot
- ベストアンサー率47% (4900/10358)
>プログラムは一般に小さく速い方が良い。 当てはまる場合もあるし、当てはまらない場合もありますね。 速度向上のためであれば、サイズを見るのは、あまり意味がないと思います。 速度を上げたいのでしたら、 ・ コンパイル結果(アセンブラソース相当)を見る ・ プロファイラを使って、プログラムのどのあたりが実行回数が多いか見る ・ プログラムのどのあたりで時間がかかっているのかを調べるツールを使う まずは、速度向上方法について書かれた本を読むことから始めるのでしょうか(環境依存です)。
お礼
回答有難うございます。 速度だけではなく、C言語で出来る事と出来ない事の研究の意味も有ります。
- TooManyBugs
- ベストアンサー率27% (1472/5321)
大部分のコンパイラではアセンブリリストを出力できますからアセンブリリストでアドレスを求めるよりありません。
お礼
回答有難う御座います。 普通のC言語の本には載っていない事の可能性を色々と試しています。
- notnot
- ベストアンサー率47% (4900/10358)
無理ですが、何のために、 >プログラムの大きさを測って表示するため、 をしたいと思ったのかを書くと、別の解決策があるかも。
補足
早速の回答有難う御座います。 プログラムは一般に小さく速い方が良い。 速度を測る部分は作ったので、速度とサイズを表示しようと思ったのです。
お礼
回答有難う御座います。 アセンブラなら出来ると思うのですが、C言語で可能なのかなと思いまして。 それからパソコンでは無くて、組み込みマイコンを使っています。