私は現在コンピューターサイエンスを学んでいて、すべてを理解したいと思っているので、本で人々が変数int x;
を宣言し、宣言のすぐ下で初期化することに気づきました。
int x;
x = 0;
それがコンパイルされたコードのメモリや効率にプラスの影響を与えるかどうか疑問に思っていましたか?
私は現在コンピューターサイエンスを学んでいて、すべてを理解したいと思っているので、本で人々が変数int x;
を宣言し、宣言のすぐ下で初期化することに気づきました。
int x;
x = 0;
それがコンパイルされたコードのメモリや効率にプラスの影響を与えるかどうか疑問に思っていましたか?
非常に特殊なコンパイラを使用していない限り、これによってコンパイルされたコードが変更されることはありません。
Javaの話は次のとおりです。
単純なクラスの場合:
public class MyClass {
public static void main(String... args)
{
int x = 0;
}
}
と
public class MyClass {
public static void main(String... args)
{
int x;
x = 0;
}
}
どちらの場合も同じバイトコードを取得します。
したがって、両者の間に違いはありません。参考までに、これは次の方法で生成されました。
javap -c MyClass.class
一般に、変数が宣言されているのと同じスコープで割り当てられている場合、パフォーマンス (およびコード) の違いはありません。最近のコンパイラは、この種の単純な最適化を実行できるはずです。(そうでない場合は、捨ててまともなものを入手してください。)
定義のスコープで割り当てを行う前に、変数のアドレスを関数に渡してそこで初期化すると、最小限の違いが生じる可能性があります。しかし、それに注意するには、実際には優れたパフォーマンスのコードが必要になるため、最初に読みやすさと安全性を考慮し (ユニット化されたメモリを使用しないでください)、その初期化に関する実用的なパフォーマンスの問題を測定した場合にのみ、そのような点に戻る必要があります。
アセンブリ言語の規模ではまったくありません。ここをチェックしてください http://gcc.godbolt.org/