Logo Passei Direto
Buscar
Material
páginas com resultados encontrados.
páginas com resultados encontrados.

Prévia do material em texto

SERVIÇO PÚBLICO FEDERAL 
INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DE SÃO PAULO 
CAMPUS SALTO 
 
1 
 
Lista de exercícios 01 da disciplina Estruturas de Dados 
Aula-01A, Aula-01B, Aula-02 
Ponteiros, Variáveis Stack e Heap dinâmicas, Dr. Memory 
Projeto Disponível em: https://www.dropbox.com/s/n0kh5k1cmsk7ouu/Lista01-
Aluno.zip?dl=0 
1) Para resolver esta lista, reveja as apresentações: Aula-01A - Ponteiros.pptx, 
Aula-01B - Stack e Heap.pptx e Aula-02 - DrMemory.pptx. 
2) Seja o fragmento de código com a execução em seguida 
 
 
a. Sabendo-se que um float ocupa 4 bytes na memória e um char ocupa 1 
byte, o que você esperaria do valor de sizeof(struct aluno_a)? 
R: 231 bytes (201+26+4) 
b. O tamanho da estrutura com 232 bytes é compatível com o que você esperava? 
R: Não, é 1 byte maior. Isso ocorre pois 1 byte fica vazio para a leitura 
ser mais rápida. 
c. Usando como base o endereço de memória 6355808, faça um desenho 
esquemático de como os elementos do array alunos ficam distribuídos na 
memória. 
 
 
https://www.dropbox.com/s/n0kh5k1cmsk7ouu/Lista01-Aluno.zip?dl=0
https://www.dropbox.com/s/n0kh5k1cmsk7ouu/Lista01-Aluno.zip?dl=0
SERVIÇO PÚBLICO FEDERAL 
INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DE SÃO PAULO 
CAMPUS SALTO 
 
2 
 
 
 
 
3) Seja o fragmento de código com a execução em seguida: 
 
 
a. Sabendo-se que um float ocupa 4 bytes na memória e um char ocupa 1 
byte, o valor de sizeof(struct aluno_b) agora é compatível com a sua 
contagem? 
R: Sim, o #pragma pack(push,1) instrui o compilador a empacotar as 
variáveis da struct com um alinhamento específico, nesse caso nenhum 
byte é perdido. 
SERVIÇO PÚBLICO FEDERAL 
INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DE SÃO PAULO 
CAMPUS SALTO 
 
3 
 
b. O compilador sempre procura acomodar as variáveis na memória de forma a 
tornar o acesso a elas mais rápido. Em códigos de 32 bits, o alignment é em 4 
bytes, na arquitetura de 64 bits, o alignment é de 8 bytes. E para tanto, é comum 
deixar bytes “em branco” (padding) em structs que teriam sizeof que não 
seriam múltiplos de 4 (código de 32 bits) ou 8 (código de 64 bits). Em suma, o 
programador pode considerar que o sizeof() será a contagem dos bytes de 
cada elemento de uma struct? 
R: Não, ele precisa levar em conta o alignment também, em caso da 
somas dos bytes das variáveis não serem múltiplos de 4(32 bits) ou 8(64 
bits). 
 
4) Seja o fragmento de código com a execução em seguida: 
 
 
 
a) Faça um desenho esquemático de como os elementos do array alunos ficam 
distribuídos na memória. 
SERVIÇO PÚBLICO FEDERAL 
INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DE SÃO PAULO 
CAMPUS SALTO 
 
4 
 
 
b) Essa função apresenta vazamento de memória, uma vez que os mallocs não 
foram liberados. Complemente a função trataAluno_c1() de maneira a 
liberar toda memória alocada. Execute o projeto a partir do Dr. Memory para 
garantir que nenhum erro de vazamento persista. 
SERVIÇO PÚBLICO FEDERAL 
INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DE SÃO PAULO 
CAMPUS SALTO 
 
5 
 
 
 
 
 
 
 
 
 
 
 
 
5) Seja o fragmento de código com a execução em seguida: 
SERVIÇO PÚBLICO FEDERAL 
INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DE SÃO PAULO 
CAMPUS SALTO 
 
6 
 
 
 
 
a) Faça um desenho esquemático de como os elementos do array alunos ficam 
distribuídos na memória. 
 
SERVIÇO PÚBLICO FEDERAL 
INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DE SÃO PAULO 
CAMPUS SALTO 
 
7 
 
b) Essa função apresenta vazamento de memória, uma vez que os mallocs não 
foram liberados. Complemente a função trataAluno_c2() de maneira a 
liberar toda memória alocada. Execute o projeto a partir do Dr. Memory para 
garantir que nenhum erro de vazamento persista. 
 
 
6) Seja o fragmento de código com a execução em seguida: 
 
 
SERVIÇO PÚBLICO FEDERAL 
INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DE SÃO PAULO 
CAMPUS SALTO 
 
8 
 
 
a) Faça um desenho esquemático de como as variáveis ficam distribuídas na 
memória. 
 
b) Essa função apresenta acesso a ponteiro oscilante. Corrija a função 
trataAluno_a2(). Execute o projeto a partir do Dr. Memory para garantir 
que nenhum erro relativo à memória persista. 
SERVIÇO PÚBLICO FEDERAL 
INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DE SÃO PAULO 
CAMPUS SALTO 
 
9 
 
 
 
 
 
 
 
7) Seja o fragmento de código com a execução em seguida: 
 
 
a) Faça um desenho esquemático de como as variáveis ficam distribuídas na 
memória. 
SERVIÇO PÚBLICO FEDERAL 
INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DE SÃO PAULO 
CAMPUS SALTO 
 
10 
 
 
 
b) Essa função apresenta erro de liberação de memória. Corrija a função 
trataAluno_a3(). Execute o projeto a partir do Dr. Memory para garantir 
que nenhum erro relativo à memória persista. 
R: Não se pode liberar memória da Stack 
 
 
 
 
SERVIÇO PÚBLICO FEDERAL 
INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DE SÃO PAULO 
CAMPUS SALTO 
 
11 
 
 
 
 
 
8) Seja o fragmento de código com a execução em seguida: 
 
 
SERVIÇO PÚBLICO FEDERAL 
INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DE SÃO PAULO 
CAMPUS SALTO 
 
12 
 
 
 
a) Por que zerar a matriz percorrendo os elementos coluna por coluna demora 
mais que o dobro do tempo do que quando a matriz é percorrida linha por linha? 
 
R: Por causa do princípio da localidade, quando percorremos a matriz por linha 
os vizinhos estarão no cache, o que torna o acesso muito mais rápido. Quando 
varremos a matriz por coluna o cache é resetado toda hora, pois é necessário 
buscar novamente na memória onde o próximo valor está armazenado e isso 
acaba aumentando o tempo de execução.

Mais conteúdos dessa disciplina