1
resposta

Duvida sobre stack e seu uso da memoria

Ola,

Gostaria de entender melhor um pequeno trecho da aula que onde, baseado na minha experiencia, não ocorre. (ou, eu que entendi errado).

  • Curso: Avançando com C++: Entenda melhor a linguagem.

  • Minutagem: 02:17

  • Transcrição:

    [02:02] Repara que tem um bloco, quando uma função é executada, quando esse conjunto de instruções é executado, o que o computador, o que o sistema operacional faz?
    
    [02:11] Ele separa dentro desse espaço, que é o que nós estamos falando agora, que é o que nós estamos conhecendo, ele separa um bloco que vai conter todos os dados, todas as informações necessárias para essa função.
    
    [02:24] Esse bloco tem aproximadamente dois mega de tamanho na maioria dos sistemas operacionais, isso depende, mas enfim, tem o espaço para nós armazenarmos dados, ou seja, variáveis.
    
    [02:35] Então, continuando, nós chamamos a funcao 1, ele vai separar mais um espaço, a função 1 vai ter esse espaço também para armazenar os seus dados e vai executando, quando chama a função 2, de novo, mais um espaço é alocado, ou seja, dentro disso, desse espaço grande de memória, nós vamos adicionando esses blocos para cada uma das funções. 

    Segundo este trecho da explicação, deixa a entender que para cada função chamada, o sistema operacional reserva 2 MB de espaço em memória, ou seja, se, por exemplo, eu chamar 5 funções em cascata, essas 5 funções irão para pilha da memória (stack) e que cada uma destas funções utilizaria 2 MB, totalizando 10 MB.

De acordo com minha experiência e testes este comportamento não ocorre, o comportamento que tenho em meus testes é que na memória será armazenado somente o que foi realmente declarado.

1 resposta

Foi um exemplo exagerado, apenas para ilustrar o conceito. Acredito também que ele estava falando do tamanho do arquivo final, e confundiu com o uso da Heap. Na hora de construir o arquivo final, tem de fato esse conceito de blocos, que costumam ser de 2mb, mas variam de acordo com o compilador.

Sua referência está correta, C é muito otimizado para uso de memória.