aula 07: - mapa de memória de um processo - ponteiros...

35
1 Aula 07: - Mapa de memória de um processo - Ponteiros (parte 1) MCTA028 – Programação Estruturada Prof. Jesús P. Mena-Chalco [email protected] 3Q-2017

Upload: trinhdung

Post on 21-Mar-2018

216 views

Category:

Documents


0 download

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

1

Aula 07: - Mapa de memória de um processo- Ponteiros (parte 1)

MCTA028 – Programação Estruturada

Prof. Jesús P. Mena-Chalco

[email protected]

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

35

exemploPonteiro3.c

Por que o código abaixo está errado?