1

ローカル関数変数の初期化には処理時間がかかりますか?例えば:

void foo ( void ) {
    char *str = "hello";
    int num = 3;
}

または、グローバル変数のように、それらの値はバイナリの読み取り専用セクションにすでに割り当てられていますか?

言い換えると、ローカル変数がない関数と比較して、ローカル変数が多い関数を呼び出すのに時間がかかるでしょうか。

編集: ここにいる多くの人が怒っているのを目にします。なぜなら、私は自分のコードを非常にうるさい/悪い方法で最適化しようとしているように見えるからです。私はこれを知っています。この質問は、最適化の理由ではなく、物事がどのように動作し機能するかを理解するためだけに行いました。ありがとうございました。ところで、おそらく私のコードは低電力MCUにありますか?他のオプションを検討してください。PCだけではありません。

4

2 に答える 2

3

それほど時間はかかりませんが、そうです。時間がかかる。

この例では、テキスト「hello」はすでに定数値としてどこかにstr存在しますが、実行時にそれを指すように設定する必要があります。

値3はに格納する必要がありますnum

于 2010-01-30T19:51:07.800 に答える
0

objdump冒険心がある場合は、追加の変数がある場合とない場合で実行可能ファイルを分解してみてください。関数でローカル変数をさらに作成すると、コンパイラーによって挿入された追加の命令(レジスターの設定またはロード操作の実行)があることがわかります。すべての命令にはゼロ以外の時間がかかります...

于 2010-01-30T19:57:52.397 に答える