Следующее из previous question here Я смотрю на результат анализа кода 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;
}
}
Анализ предупреждает меня, что я использую 20000 байт стека в MyFunc
. В этом случае все переменные стека выделяются при записи функции и освобождаются при выходе функции, а не по мере их создания и разрушаются с помощью области видимости? Просто любопытно (но не достаточно любопытно, чтобы пройти через сборку;)) related question здесь не совсем дает мне ответ, который я ищу.
Зависит от компилятора и его оптимизации. Это не то, что прямо предусмотрено стандартом. – Mat