Каждый поток имеет зарезервированное пространство стека, и в вашем случае обе функции работают в одном потоке, поэтому оба используют одно и то же пространство стека.
В Windows по умолчанию с использованием MSVC каждый поток будет выделять 1 МБ для стека, и теперь вот почему эта информация важна.
void func1();
int main()
{
char abusive_stack_usage[900'000];
// we are about to call func1, and we only have 100kb left to use in the stack.
func1();
}
void func1()
{
// here we use more than 100kb, therefore we get a stackoverflow.
char abusive_stack_usage[200'000];
}
В следующем примере мы не получаем StackOverflow.
void func1()
{
//we use 800kb here (available in stack: 200kb)
char abusive_stack_usage[800'000];
} // we release those 800kb here (available in stack: 1mb)
void func2()
{
char abusive_stack_usage[800'000];
}
int main()
{
// available: 1mb
func1();
// available: 1mb
func2();
}
Это зависит почти все, что вы не указали. –
Вы не можете положиться ни на что здесь. Если оптимизатор встроит функцию, они почти наверняка разделяют одно и то же пространство стека. Реальный вопрос: зачем вас это волнует? Что вы на самом деле пытаетесь сделать? –
C++ - неправильный язык для вас. Вы действительно хотите писать на ассемблере. –