dポイントプレゼントキャンペーン実施中!

 プログラムの大きさを測って表示するため、次のようなプログラムを実験しました。
 しかしエラーになります。
 L1,L2 のラベルの値を知る方法は有るのでしょうか。

void *SIZE;
L1:
 測定したいプログラム
L2:
SIZE = L2 - L1;

A 回答 (5件)

ないです。


仮にあったとしても目的とするプログラム部分の大きさになるとも限りませんし。
    • good
    • 0
この回答へのお礼

 回答有難う御座います。

 アセンブラなら出来ると思うのですが、C言語で可能なのかなと思いまして。
 それからパソコンでは無くて、組み込みマイコンを使っています。

お礼日時:2012/09/16 22:00

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
.EXPORTL3
L3:
#pragma endasm
lv1 = L3;

補足日時:2012/09/18 00:14
    • good
    • 0

>プログラムは一般に小さく速い方が良い。



当てはまる場合もあるし、当てはまらない場合もありますね。
速度向上のためであれば、サイズを見るのは、あまり意味がないと思います。

速度を上げたいのでしたら、
・ コンパイル結果(アセンブラソース相当)を見る
・ プロファイラを使って、プログラムのどのあたりが実行回数が多いか見る
・ プログラムのどのあたりで時間がかかっているのかを調べるツールを使う

まずは、速度向上方法について書かれた本を読むことから始めるのでしょうか(環境依存です)。
    • good
    • 0
この回答へのお礼

 回答有難うございます。

 速度だけではなく、C言語で出来る事と出来ない事の研究の意味も有ります。

お礼日時:2012/09/19 23:20

大部分のコンパイラではアセンブリリストを出力できますからアセンブリリストでアドレスを求めるよりありません。

    • good
    • 0
この回答へのお礼

 回答有難う御座います。

 普通のC言語の本には載っていない事の可能性を色々と試しています。

お礼日時:2012/09/16 22:04

無理ですが、何のために、


>プログラムの大きさを測って表示するため、
をしたいと思ったのかを書くと、別の解決策があるかも。

この回答への補足

 早速の回答有難う御座います。

 プログラムは一般に小さく速い方が良い。
 速度を測る部分は作ったので、速度とサイズを表示しようと思ったのです。

補足日時:2012/09/16 21:44
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!