C scope와 메모리 스택에 관한 질문입니다.

jeff_an의 이미지

int main(void)
{
    int fd[2], status;
    pid_t pid;
 
    if (pipe(fd) == -1)
    {
        perror("pipe");
        exit(1);
    }
 
    switch (pid = fork())
    {
        case -1:
            perror("fork");
            exit(1);
            break;
        case 0:
            close(fd[1]);
            if (fd[0] != 0)
            {
                dup2(fd[0], 0);
                close(fd[0]);
            }
            execlp("/usr/bin/wc", "wc", "-l", NULL);
            exit(2);
            break;
        default:
            close(fd[0]);
            {
                char *str = "test line\n";
                int n, i;
                for (i = 0; i < 10; i++)
                    write(fd[1], str, strlen(str));
            }
            close(fd[1]);
            wait(NULL);
            break;
    }
 
    return 0;
}

위 default 케이스를 보시면 제가 임의로 { } 범위설정해서 str, n, i 변수를 선언하고 사용하고 있는데, 이런식으로 프로그래밍하면 실제로 런타임때 스택이 어떻게 변화하는지 궁금하네요.
함수의 경우에는 스택 프레임이 생성되고 그 범위내에 데이터를 저장할 공간들이 생성된다고 알고 있습니다. 만약에 저런식으로 그냥 scope만 설정하고 변수 선언, 초기화 작업후 사용할 땐 스택 프레임이 생성되는지 아니면 그냥 변수를 저장할 공간만 생성이 되는지 궁금합니다.