1
ほとんどの場合、私はその中で多くの変数を作りますが、コードをデバッグするのが簡単だからです。コンパイラの最適化 - 変数のメモリ使用量
私はこの機能を持っているとしましょう:
void foo(int value) {
int x = value * 1;
int y = value * 2;
int z = value * 3;
int u = x + 1;
int v = y + 2;
int w = z + 3;
}
このコードは、罰金やデバッグにその簡単です(あなたは何が起こっているかをステップバイステップを見ることができる)が、その大量のメモリを使用して(それを考慮すると28のバイト各int
は4バイト)であり、それはこの方法で最適化することができます
-
:これに基づき
- コンパイラはリリースビルドでこの種の最適化を行っていますか?
- 多くのレジスタの使用を避けるために、関数内で使用されていない変数のメモリを再利用しますか?
void foo(int value) {
int u = value * 1 + 1;
int v = value * 2 + 2;
int w = value * 3 + 3;
}
私はいくつかの質問を持っています
現実世界の例が良いかもしれません。これらの関数はnon-opsであり、完全に最適化されている可能性があります。生成されたアセンブルを常にチェックして、コンパイラがコードをコンパイルした後に実際に実行するかどうかを確認することはできません。 – NathanOliver
しかし、関数が返るとすぐに、これらの28バイトは次の関数呼び出しのために解放されます。それらはスタックに一時的に格納されています(これは "割り振る"にもかなり安い)。 – Steve
関数の実行はその存在に依存しないため、ほとんど存在しない可能性があります。また、レジスタの割り当ても重要です。ほとんどのローカル変数はメモリにありません。 – harold