While there is no "sub-stack", scoping can have an effect on the stack. After a variable goes out of scope, the compiler is allowed to use that variable's stack space for variables that are declared later on.
For example:
Code:
#include <iostream>
using namespace std;
int main()
{
{
int y = 10;
}
int x;
cout << x << endl;
return 0;
}
My output from this program is 10 even though I never initialize x. The compiler is using y's stack space for x because y will never be in scope again.
Note that you shouldn't depend on this behavior. It may vary depending on which compiler you use and the level of optimization.