- 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
chamafun2
,fun2
chamafun1
,fun1
chamafun1
, efun1
chamafun3
.void fun1() { float a; ... } void fun2() { int b, c; ... } void fun3() { float d; // Esta é a linha 10 ... } void main() { char e, f, g; ... }
- 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 tiposint
,float
sejam de 4 bytes echar
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. - 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
elist
nos três pontos (A
,B
,C
)?Método Ponto value list por Valor A por Valor B por Valor C por Referência A por Referência B por Referência C por Valor-Resultado A por Valor-Resultado B por Valor-Resultado C
- 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étodo Valor do vetor list
no finalpor Valor por Referência por Valor-Resultado