続きを読む私はVS2015コード解析の出力を見てきましたが、次のように簡略化できる関数でスタック使用率が高いという警告が表示されます。スタックフレームはスコープで割り当てられ、割り当てが解除されていますか?
class base
{
public:
virtual void Process();
Buffer[10000];
};
class derived1 : public base
{
public:
void Process();
}
class derived2 : public base
{
public:
void Process();
}
void MyFunc(int x)
{
switch(x)
{
case 0:
{
derived1 x;
x.Process();
} break;
case 1:
{
derived2 y;
y.Process();
} break;
}
}
この分析では、私がMyFunc
に20,000バイトのスタックを使用していることが警告されています。これは、すべてのスタック変数が、関数エントリで割り当てられ、関数出口で割り当て解除され、スコープで構築され、破棄されるためではありませんか?ちょうど興味がありません(しかし、アセンブリの出力を渡り歩くのに十分興味がありません;))related questionここでは私が探している答えはあまりありません。
コンパイラとその最適化によって異なります。これは標準によって直接義務づけられたものではありません。 – Mat