Skip to content

Latest commit

 

History

History
98 lines (87 loc) · 3.12 KB

README.org

File metadata and controls

98 lines (87 loc) · 3.12 KB

CATP #12 (Subprogramas)

  1. Mostre o conteúdo detalhado da pilha com registros de ativação, incluindo os ponteiros de vínculo dinâmico e estático, quando a execução atinge a linha 10 no seguinte esqueleto de programa. Para tal, considere que a sequência de chamada é a seguinte: main chama fun2, fun2 chama fun1, fun1 chama fun1, e fun1 chama fun3.
    void fun1() {
      float a;
      ...
    }
    void fun2() {
      int b, c;
      ...
    }
    void fun3() {
      float d; // Esta é a linha 10
      ...
    }
    void main() {
      char e, f, g;
      ...
    }
        
  2. Para o código do exercício anterior, mostre o deslocamento em relação ao fp (frame pointer) calculado pelo compilador para cada uma das variáveis. Assuma que o tamanho dos tipos int, float sejam de 4 bytes e char seja de 1 byte. Assuma que os vínculos dinâmicos e estático ocupem 4 bytes, e que o estado da máquina (registradores, etc) ocupa 8 bytes.
  3. Considere o seguinte programa escrito na sintaxe da linguagem C:
    void swap(int a, int b) {
      int temp;
      temp = a;
      a = b;
      b = temp;
    }
    void main() {
      int value = 3, list[5] = {1, 3, 5, 7, 9};
      swap(value, list[0]);
      //Ponto A
      swap(list[0], list[1]);
      //Ponto B
      swap(value, list[value]);
      //Ponto C
    }
        

    Para cada um dos métodos de passagem de parâmetros (por valor, por referência, por valor-resultado), quais são os valores das variáveis value e list nos três pontos (A, B, C)?

    MétodoPontovaluelist
    por ValorA
    por ValorB
    por ValorC
    por ReferênciaA
    por ReferênciaB
    por ReferênciaC
    por Valor-ResultadoA
    por Valor-ResultadoB
    por Valor-ResultadoC

Opcional

  1. Considere o seguinte programa escrito na sintaxe da linguagem C:
    void fun(int first, int second) {
      first += first;
      second += second;
    }
    void main() {
      int list[2] = {1, 3};
      fun(list[0], list[1]);
    }     
        

    Para cada um dos métodos seguintes, quais são os valores no vetor list após a execução?

    MétodoValor do vetor list no final
    por Valor
    por Referência
    por Valor-Resultado