aula 07: - mapa de memória de um processo - ponteiros...
TRANSCRIPT
![Page 1: Aula 07: - Mapa de memória de um processo - Ponteiros ...professor.ufabc.edu.br/~jesus.mena/courses/mcta028-3q-2017/PE-aula... · Alocação de memória: ... Alocação estática](https://reader031.vdocuments.pub/reader031/viewer/2022032209/5ab1e28c7f8b9ac3348cfa6a/html5/thumbnails/1.jpg)
1
Aula 07: - Mapa de memória de um processo- Ponteiros (parte 1)
MCTA028 – Programação Estruturada
Prof. Jesús P. Mena-Chalco
3Q-2017
![Page 2: Aula 07: - Mapa de memória de um processo - Ponteiros ...professor.ufabc.edu.br/~jesus.mena/courses/mcta028-3q-2017/PE-aula... · Alocação de memória: ... Alocação estática](https://reader031.vdocuments.pub/reader031/viewer/2022032209/5ab1e28c7f8b9ac3348cfa6a/html5/thumbnails/2.jpg)
2
Mapa de memória de um processo
![Page 3: Aula 07: - Mapa de memória de um processo - Ponteiros ...professor.ufabc.edu.br/~jesus.mena/courses/mcta028-3q-2017/PE-aula... · Alocação de memória: ... Alocação estática](https://reader031.vdocuments.pub/reader031/viewer/2022032209/5ab1e28c7f8b9ac3348cfa6a/html5/thumbnails/3.jpg)
3
Alocação de memória: estática VS Dinâmica
Na execução, um programa é um processo.
Um processo ocupa parte da memória principal, reservada para:
As instruções, eA pilha
![Page 4: Aula 07: - Mapa de memória de um processo - Ponteiros ...professor.ufabc.edu.br/~jesus.mena/courses/mcta028-3q-2017/PE-aula... · Alocação de memória: ... Alocação estática](https://reader031.vdocuments.pub/reader031/viewer/2022032209/5ab1e28c7f8b9ac3348cfa6a/html5/thumbnails/4.jpg)
4
INSTRUÇÕES
Armazena o código compilado (na linguagem máquina)
[~bytes]
PILHA (STACK)
Armazena as variáveis ao longo da execução do programa.
[~Mbytes]
Processo na memória
Tamanho limitado
![Page 5: Aula 07: - Mapa de memória de um processo - Ponteiros ...professor.ufabc.edu.br/~jesus.mena/courses/mcta028-3q-2017/PE-aula... · Alocação de memória: ... Alocação estática](https://reader031.vdocuments.pub/reader031/viewer/2022032209/5ab1e28c7f8b9ac3348cfa6a/html5/thumbnails/5.jpg)
5
INSTRUÇÕES
Armazena o código compilado (na linguagem máquina)
[~bytes]
PILHA (STACK)
Armazena as variáveis ao longo da execução do programa.
[~Mbytes]
Processo na memória
HEAP
Espaço de memória principal gerenciado pelo SO.
[~Toda a memória RAM]
Tamanho limitado
![Page 6: Aula 07: - Mapa de memória de um processo - Ponteiros ...professor.ufabc.edu.br/~jesus.mena/courses/mcta028-3q-2017/PE-aula... · Alocação de memória: ... Alocação estática](https://reader031.vdocuments.pub/reader031/viewer/2022032209/5ab1e28c7f8b9ac3348cfa6a/html5/thumbnails/6.jpg)
6
INSTRUÇÕES
Armazena o código compilado (na linguagem máquina)
[~bytes]
PILHA (STACK)
Armazena as variáveis ao longo da execução do programa.
[~Mbytes]
Processo na memória
HEAP
Espaço de memória principal gerenciado pelo SO.
[~Toda a memória RAM]
Alocação estática Alocação dinâmica
int x;double M[10][20];char *c;
double M = malloc(...);
![Page 7: Aula 07: - Mapa de memória de um processo - Ponteiros ...professor.ufabc.edu.br/~jesus.mena/courses/mcta028-3q-2017/PE-aula... · Alocação de memória: ... Alocação estática](https://reader031.vdocuments.pub/reader031/viewer/2022032209/5ab1e28c7f8b9ac3348cfa6a/html5/thumbnails/7.jpg)
7
![Page 8: Aula 07: - Mapa de memória de um processo - Ponteiros ...professor.ufabc.edu.br/~jesus.mena/courses/mcta028-3q-2017/PE-aula... · Alocação de memória: ... Alocação estática](https://reader031.vdocuments.pub/reader031/viewer/2022032209/5ab1e28c7f8b9ac3348cfa6a/html5/thumbnails/8.jpg)
8
Maior elemento em um vetor
← Alocação estática
← Alocação dinâmica
← Alocação estática
![Page 9: Aula 07: - Mapa de memória de um processo - Ponteiros ...professor.ufabc.edu.br/~jesus.mena/courses/mcta028-3q-2017/PE-aula... · Alocação de memória: ... Alocação estática](https://reader031.vdocuments.pub/reader031/viewer/2022032209/5ab1e28c7f8b9ac3348cfa6a/html5/thumbnails/9.jpg)
9
INSTRUÇÕES PILHA (STACK)
Processo na memória
HEAP
Ponteiros?
Em Java e Python o uso é transparente. Não precisa se preocupar de alocar e
liberar memória
![Page 10: Aula 07: - Mapa de memória de um processo - Ponteiros ...professor.ufabc.edu.br/~jesus.mena/courses/mcta028-3q-2017/PE-aula... · Alocação de memória: ... Alocação estática](https://reader031.vdocuments.pub/reader031/viewer/2022032209/5ab1e28c7f8b9ac3348cfa6a/html5/thumbnails/10.jpg)
10
INSTRUÇÕES PILHA (STACK)
Processo na memória
HEAP
Fenômeno: Stack Overflow
![Page 11: Aula 07: - Mapa de memória de um processo - Ponteiros ...professor.ufabc.edu.br/~jesus.mena/courses/mcta028-3q-2017/PE-aula... · Alocação de memória: ... Alocação estática](https://reader031.vdocuments.pub/reader031/viewer/2022032209/5ab1e28c7f8b9ac3348cfa6a/html5/thumbnails/11.jpg)
11
Ponteiros
![Page 12: Aula 07: - Mapa de memória de um processo - Ponteiros ...professor.ufabc.edu.br/~jesus.mena/courses/mcta028-3q-2017/PE-aula... · Alocação de memória: ... Alocação estática](https://reader031.vdocuments.pub/reader031/viewer/2022032209/5ab1e28c7f8b9ac3348cfa6a/html5/thumbnails/12.jpg)
12
Vetores e ponteiros
vetor
...
...int vetor[7] = {1,2,3,4,3,2,1}
![Page 13: Aula 07: - Mapa de memória de um processo - Ponteiros ...professor.ufabc.edu.br/~jesus.mena/courses/mcta028-3q-2017/PE-aula... · Alocação de memória: ... Alocação estática](https://reader031.vdocuments.pub/reader031/viewer/2022032209/5ab1e28c7f8b9ac3348cfa6a/html5/thumbnails/13.jpg)
13
Vetores e ponteiros
...
...
![Page 14: Aula 07: - Mapa de memória de um processo - Ponteiros ...professor.ufabc.edu.br/~jesus.mena/courses/mcta028-3q-2017/PE-aula... · Alocação de memória: ... Alocação estática](https://reader031.vdocuments.pub/reader031/viewer/2022032209/5ab1e28c7f8b9ac3348cfa6a/html5/thumbnails/14.jpg)
14
Endereços de memória
16¹²= 281 474 976 710 656
4 bits para representar cada número na base 16.→ 12*4=48 bits → 2^48 (números diferentes)
![Page 15: Aula 07: - Mapa de memória de um processo - Ponteiros ...professor.ufabc.edu.br/~jesus.mena/courses/mcta028-3q-2017/PE-aula... · Alocação de memória: ... Alocação estática](https://reader031.vdocuments.pub/reader031/viewer/2022032209/5ab1e28c7f8b9ac3348cfa6a/html5/thumbnails/15.jpg)
15
Large Synoptic Survey Telescope, LSST
http://www.lsst.org/lsst/
Telescopio Grande para Rastreos Sinópticos (Large Synoptic Survey Telescope, LSST): – 8,4 metros– capaz de examinar a totalidade do ceu visible– Norte do Chile (2016)– Camera de 3200 megapixels (~3 Gigapixels)
Planejado para armazenar mais de 30 Terabytes de dados de imagens por noite, mantendo em ~10 anos um banco de dados de 15 Petabytes
![Page 16: Aula 07: - Mapa de memória de um processo - Ponteiros ...professor.ufabc.edu.br/~jesus.mena/courses/mcta028-3q-2017/PE-aula... · Alocação de memória: ... Alocação estática](https://reader031.vdocuments.pub/reader031/viewer/2022032209/5ab1e28c7f8b9ac3348cfa6a/html5/thumbnails/16.jpg)
16
Grande escala?
1000 kB kilobyte1000² MB megabyte1000³ GB gigabyte1000⁴ TB terabyte1000⁵ PB petabyte1000⁶ EB exabyte1000⁷ ZB zettabyte1000⁸ YB yottabyte
http://mozy.com/blog/misc/how-much-is-a-petabyte/
![Page 17: Aula 07: - Mapa de memória de um processo - Ponteiros ...professor.ufabc.edu.br/~jesus.mena/courses/mcta028-3q-2017/PE-aula... · Alocação de memória: ... Alocação estática](https://reader031.vdocuments.pub/reader031/viewer/2022032209/5ab1e28c7f8b9ac3348cfa6a/html5/thumbnails/17.jpg)
17
Endereços e ponteiros
(*) Fonte: P. Feofiloff. Algoritmos em Linguagem C. 1ª Edição, Editora Campos, 2008.
![Page 18: Aula 07: - Mapa de memória de um processo - Ponteiros ...professor.ufabc.edu.br/~jesus.mena/courses/mcta028-3q-2017/PE-aula... · Alocação de memória: ... Alocação estática](https://reader031.vdocuments.pub/reader031/viewer/2022032209/5ab1e28c7f8b9ac3348cfa6a/html5/thumbnails/18.jpg)
18
Endereços e ponteiros
Os conceitos de endereço e ponteiro são importantes em qualquer linguagem de programação.
Na linguagem C é mais visível este conceito.
Requer um esforço para usar os ponteiros.
(*) Fonte: P. Feofiloff. Algoritmos em Linguagem C. 1ª Edição, Editora Campos, 2008.
![Page 19: Aula 07: - Mapa de memória de um processo - Ponteiros ...professor.ufabc.edu.br/~jesus.mena/courses/mcta028-3q-2017/PE-aula... · Alocação de memória: ... Alocação estática](https://reader031.vdocuments.pub/reader031/viewer/2022032209/5ab1e28c7f8b9ac3348cfa6a/html5/thumbnails/19.jpg)
19
Endereços
A memória de qualquer computador (arquitetura de Von Neumann) é uma sequência de bytes.
Cada byte armazena um de 256 possíveis valores.
Os bytes são numerados sequencialmente e o número de um byte é o seu endereço
(*) Fonte: http://codingfox.com/3-1-computer-memory-and-data-representation/
![Page 20: Aula 07: - Mapa de memória de um processo - Ponteiros ...professor.ufabc.edu.br/~jesus.mena/courses/mcta028-3q-2017/PE-aula... · Alocação de memória: ... Alocação estática](https://reader031.vdocuments.pub/reader031/viewer/2022032209/5ab1e28c7f8b9ac3348cfa6a/html5/thumbnails/20.jpg)
20
Endereços
...
01010111
11000011
01100100
11100010
...
0x37FD00
0x37FD01
0x37FD02
0x37FD03
![Page 21: Aula 07: - Mapa de memória de um processo - Ponteiros ...professor.ufabc.edu.br/~jesus.mena/courses/mcta028-3q-2017/PE-aula... · Alocação de memória: ... Alocação estática](https://reader031.vdocuments.pub/reader031/viewer/2022032209/5ab1e28c7f8b9ac3348cfa6a/html5/thumbnails/21.jpg)
21
Endereços
...
01010111
11000011
01100100
11100010
...
0x37FD00
0x37FD01
0x37FD02
0x37FD03
Cada objeto na memória do computador tem um endereço.
![Page 22: Aula 07: - Mapa de memória de um processo - Ponteiros ...professor.ufabc.edu.br/~jesus.mena/courses/mcta028-3q-2017/PE-aula... · Alocação de memória: ... Alocação estática](https://reader031.vdocuments.pub/reader031/viewer/2022032209/5ab1e28c7f8b9ac3348cfa6a/html5/thumbnails/22.jpg)
22
Endereços
...
01010111
11000011
01100100
11100010
...
37FD00
37FD01
37FD02
37FD03
Geralmente o endereço do objeto é o endereço do 1ro byte.
![Page 23: Aula 07: - Mapa de memória de um processo - Ponteiros ...professor.ufabc.edu.br/~jesus.mena/courses/mcta028-3q-2017/PE-aula... · Alocação de memória: ... Alocação estática](https://reader031.vdocuments.pub/reader031/viewer/2022032209/5ab1e28c7f8b9ac3348cfa6a/html5/thumbnails/23.jpg)
23
Endereços
Observe o símbolo &
![Page 24: Aula 07: - Mapa de memória de um processo - Ponteiros ...professor.ufabc.edu.br/~jesus.mena/courses/mcta028-3q-2017/PE-aula... · Alocação de memória: ... Alocação estática](https://reader031.vdocuments.pub/reader031/viewer/2022032209/5ab1e28c7f8b9ac3348cfa6a/html5/thumbnails/24.jpg)
24
Endereços
![Page 25: Aula 07: - Mapa de memória de um processo - Ponteiros ...professor.ufabc.edu.br/~jesus.mena/courses/mcta028-3q-2017/PE-aula... · Alocação de memória: ... Alocação estática](https://reader031.vdocuments.pub/reader031/viewer/2022032209/5ab1e28c7f8b9ac3348cfa6a/html5/thumbnails/25.jpg)
25
Endereços
Em c o endereço de um objeto é dado pelo operador &
Se x é uma variável, então &x é o seu endereçoint s = 9999
0x89422
-9999
s
![Page 26: Aula 07: - Mapa de memória de um processo - Ponteiros ...professor.ufabc.edu.br/~jesus.mena/courses/mcta028-3q-2017/PE-aula... · Alocação de memória: ... Alocação estática](https://reader031.vdocuments.pub/reader031/viewer/2022032209/5ab1e28c7f8b9ac3348cfa6a/html5/thumbnails/26.jpg)
26
Endereços
Em c o endereço de um objeto é dado pelo operador &
Se x é uma variável, então &x é o seu endereçoint s = 9999
int *p = &s
0x89422
0x60001
p
p = 0x89422&p = 0x60001
-9999
0x89422
*p = -9999
s
“p aponta para a s”“p é o endereço de s”“p aponta a s”
*p é o mesmo que escrever “s”
![Page 27: Aula 07: - Mapa de memória de um processo - Ponteiros ...professor.ufabc.edu.br/~jesus.mena/courses/mcta028-3q-2017/PE-aula... · Alocação de memória: ... Alocação estática](https://reader031.vdocuments.pub/reader031/viewer/2022032209/5ab1e28c7f8b9ac3348cfa6a/html5/thumbnails/27.jpg)
27
Endereços
48
![Page 28: Aula 07: - Mapa de memória de um processo - Ponteiros ...professor.ufabc.edu.br/~jesus.mena/courses/mcta028-3q-2017/PE-aula... · Alocação de memória: ... Alocação estática](https://reader031.vdocuments.pub/reader031/viewer/2022032209/5ab1e28c7f8b9ac3348cfa6a/html5/thumbnails/28.jpg)
28
Endereços
Todo ponteiro pode ter o valor NULL.NULL é uma constante, geralmente vale 0 (definida no arquivo interface stdlib)
0
0x564320
p
int *p = NULL;
0x00000
![Page 29: Aula 07: - Mapa de memória de um processo - Ponteiros ...professor.ufabc.edu.br/~jesus.mena/courses/mcta028-3q-2017/PE-aula... · Alocação de memória: ... Alocação estática](https://reader031.vdocuments.pub/reader031/viewer/2022032209/5ab1e28c7f8b9ac3348cfa6a/html5/thumbnails/29.jpg)
29
Endereços
Há vários tipos de ponteiros:P. para caracteresP. para inteirosP. para registrosP. para ponteiros para inteirosP. para função
int* p ;
int *p;
int * p;
← O “*” modifica a variável e não o int (mais aceito)
← Um tipo de dado novo int* (conceitualmente correto)
O compilador C aceita qualquer das formas.
![Page 30: Aula 07: - Mapa de memória de um processo - Ponteiros ...professor.ufabc.edu.br/~jesus.mena/courses/mcta028-3q-2017/PE-aula... · Alocação de memória: ... Alocação estática](https://reader031.vdocuments.pub/reader031/viewer/2022032209/5ab1e28c7f8b9ac3348cfa6a/html5/thumbnails/30.jpg)
30
exemploPonteiro.c
Operadores unarios & → Referência: na frente de uma variável: Devolve o endereço de memória onde a variável está armazenada
* → Derreferência: na frente de variável ou expressão: Devolve o valor ou conteúdo do endereço de memória apontada pela variável ou expressão
![Page 31: Aula 07: - Mapa de memória de um processo - Ponteiros ...professor.ufabc.edu.br/~jesus.mena/courses/mcta028-3q-2017/PE-aula... · Alocação de memória: ... Alocação estática](https://reader031.vdocuments.pub/reader031/viewer/2022032209/5ab1e28c7f8b9ac3348cfa6a/html5/thumbnails/31.jpg)
31
exemploPonteiro.c
![Page 32: Aula 07: - Mapa de memória de um processo - Ponteiros ...professor.ufabc.edu.br/~jesus.mena/courses/mcta028-3q-2017/PE-aula... · Alocação de memória: ... Alocação estática](https://reader031.vdocuments.pub/reader031/viewer/2022032209/5ab1e28c7f8b9ac3348cfa6a/html5/thumbnails/32.jpg)
32
exemploPonteiro2.c
![Page 33: Aula 07: - Mapa de memória de um processo - Ponteiros ...professor.ufabc.edu.br/~jesus.mena/courses/mcta028-3q-2017/PE-aula... · Alocação de memória: ... Alocação estática](https://reader031.vdocuments.pub/reader031/viewer/2022032209/5ab1e28c7f8b9ac3348cfa6a/html5/thumbnails/33.jpg)
33
exemploPonteiro3.c
![Page 34: Aula 07: - Mapa de memória de um processo - Ponteiros ...professor.ufabc.edu.br/~jesus.mena/courses/mcta028-3q-2017/PE-aula... · Alocação de memória: ... Alocação estática](https://reader031.vdocuments.pub/reader031/viewer/2022032209/5ab1e28c7f8b9ac3348cfa6a/html5/thumbnails/34.jpg)
34
exemploPonteiro3.c
![Page 35: Aula 07: - Mapa de memória de um processo - Ponteiros ...professor.ufabc.edu.br/~jesus.mena/courses/mcta028-3q-2017/PE-aula... · Alocação de memória: ... Alocação estática](https://reader031.vdocuments.pub/reader031/viewer/2022032209/5ab1e28c7f8b9ac3348cfa6a/html5/thumbnails/35.jpg)
35
exemploPonteiro3.c
Por que o código abaixo está errado?