Você está na página 1de 26

INE5408 Estruturas de Dados

Semestre 2008/1
Prof. Leandro J. Komosinski

ALOCAO
DINMICA DE
MEMRIA
UFSCCTCINEINE5408EstruturasdeDados2008/1

Memria de Computador
1byte=8bits(ex.:00100110)
1KB=1024bytes
1MB=1024KB
1GB=1024MB
Meucomputadortem4GBdememria.
4GB=4*1GB
4*1GB=4*1024MB=4096*1MB
4096*1MB=4096*1024KB=4.194.304*1KB
4.194.304*1KB=4.194.304*1024bytes
4.194.304*1024bytes=4.294.967.296bytes

UFSCCTCINEINE5408EstruturasdeDados2008/1

Memria Lgica
de Computador
Amemriadocomputadorpodeserentendida,do
pontodevistalgico,comosendoumarray.

Meucomputadortem4GBdememria.
0123...4.294.967.295

Endereo de
Memria

ndicedoarray.

UFSCCTCINEINE5408EstruturasdeDados2008/1

Variveis em
um Programa

Para o
Programador
Umsmboloquerepresentauma
informao.

Para o
Computador
Nbytesdamemriareservados
pararepresentaralgumdado.

UFSCCTCINEINE5408EstruturasdeDados2008/1

...
publicvoidm(){
inta;
charb;

EmJava,umavariveldotipoint
ocupa4bytesdamemria.Uma
variveldotipocharocupa1byte
damemria.

a=7;
b='t';
}
...

...3738394041...

ab

Todavarivelocupaalgumaquantidade
debytesnamemria.
UFSCCTCINEINE5408EstruturasdeDados2008/1

Tipos de
Variveis
Quasetodasaslinguagensdeprogramaopermitemusardoistiposde
variveis:estticasedinmicas.

Variveis
Estticas
Odadoarmazenado

diretamentenareade
memriareservadaparaa
varivel.

Variveis
Dinmicas
Oprogramadordevealocar(reservar)
umaoutrareadememriapara
armazenarodado.Avarivelarmazena
oendereodareaquefoialocada.

UFSCCTCINEINE5408EstruturasdeDados2008/1

...
publicvoidm(){
char[]a;
charb;

avariveldinmica
bvairvelesttica

a=newchar[3];
a[0]='f';
a[1]='i';
a[2]='m';
b='t';
}
...

Variveisdinmicastambmso
chamadasdeponteiros
(pointers)ouapontadores.

...373839...

8283848586...

37

ab
UFSCCTCINEINE5408EstruturasdeDados2008/1

Tipos de
Variveis em
Java

Tipo Primitivo
Variveisdotipoprimitivo
soestticaserepresentam
nmeros,caracterebooleano.

EmJavaexistemdoistiposde
variveis:primitivoereferncia.

Tipo Referncia
Variveisdotiporefernciaso
dinmicaserepresentamobjetos,
classes,interfacesearrays.

UFSCCTCINEINE5408EstruturasdeDados2008/1

Alocao de Memria em Java


AMquinaVirtualJava(MVJ)quemseencarregade
encontrarespaolivrenamemriaereservaronmerode
bytesnecessriosparaotipodedadoquesequerarmazenar.
Emoutraslinguagens,comoCeC++,oprogramador
podesaber,escolheremanipularoendereoondeos
dadosseroarmazenados.
ParaoprogramadorJava,nointeressaemqualendereo
umdadoestarmazenado.
UFSCCTCINEINE5408EstruturasdeDados2008/1

Alocao Dinmica Memria


quandocabeaoprogramadordefiniremquemomento,
duranteaexecuodoprograma,seralocadopelosistema
operacional(emJava,pelaMVJ)umareadememriagrandeo
suficientepararepresentarumdado.
Umavariveldinmica(ponteiro)armazenaendereode
memria.Logo,estavarivelsterutilidadeparao
programadorquandoelaapontarparaumaoutrareada
memriaqueasimconterumdadotil.

UFSCCTCINEINE5408EstruturasdeDados2008/1

Alocao Dinmica em Java

new<tipo>
...
int[]b;
inttam;
Xp;
tam=5;
b=newint[tam];
p=newX();
...

...
Xp;
p=m();
...
publicXm(){
returnnewX();
}

...
Strings;
int[]v;
s=teste;
v=newint[]{3,70};
...

UFSCCTCINEINE5408EstruturasdeDados2008/1

Alocao Dinmica em Java Exemplo 1


MEMRIA

publicclassX{
publicintv1;
publiccharv2;
}
inta;
charb;
Xp;

UFSCCTCINEINE5408EstruturasdeDados2008/1

Alocao Dinmica em Java Exemplo 1


publicclassX{
publicintv1;
publiccharv2;
}
inta;
charb;
Xp;
a=50;

MEMRIA
50

UFSCCTCINEINE5408EstruturasdeDados2008/1

Alocao Dinmica em Java Exemplo 1


publicclassX{
publicintv1;
publiccharv2;
}
inta;
charb;
Xp;
a=50;
p=newX();

MEMRIA
50

v1v2

UFSCCTCINEINE5408EstruturasdeDados2008/1

Alocao Dinmica em Java Exemplo 1


publicclassX{
publicintv1;
publiccharv2;
}
inta;
charb;
Xp;
a=50;
p=newX();
p.v2='k';

MEMRIA
50

v1v2

UFSCCTCINEINE5408EstruturasdeDados2008/1

Alocao Dinmica em Java Exemplo 1


publicclassX{
publicintv1;
publiccharv2;
}
inta;
charb;
Xp;
a=50;
p=newX();
p.v2='k';
b=p.v2;

MEMRIA
50

a
k

v1v2

UFSCCTCINEINE5408EstruturasdeDados2008/1

Alocao Dinmica em Java Exemplo 1


publicclassX{
publicintv1;
publiccharv2;
}
inta;
charb;
Xp;
a=50;
p=newX();
p.v2='k';
b=p.v2;
p.v1=a;

MEMRIA
50

a
k

50

v1v2

UFSCCTCINEINE5408EstruturasdeDados2008/1

Alocao Dinmica em Java Exemplo 2


publicclassX{
publicintv1;
publiccharv2;
}
Xo1,o2,o3;

MEMRIA

o1

o2

o3

UFSCCTCINEINE5408EstruturasdeDados2008/1

Alocao Dinmica em Java Exemplo 2


publicclassX{
publicintv1;
publiccharv2;
}
Xo1,o2,o3;
o1=newX();

MEMRIA

o1

v1v2

o2

o3

UFSCCTCINEINE5408EstruturasdeDados2008/1

Alocao Dinmica em Java Exemplo 2


publicclassX{
publicintv1;
publiccharv2;
}
Xo1,o2,o3;
o1=newX();
o1.v1=10;

MEMRIA

o1

10

v1v2

o2

o3

UFSCCTCINEINE5408EstruturasdeDados2008/1

Alocao Dinmica em Java Exemplo 2


MEMRIA

publicclassX{
publicintv1;
publiccharv2;
}

Xo1,o2,o3;

o1=newX();
o1.v1=10;
o2=o1;

o1

10

v1v2

o2

o3

UFSCCTCINEINE5408EstruturasdeDados2008/1

Alocao Dinmica em Java Exemplo 2


MEMRIA

publicclassX{
publicintv1;
publiccharv2;
}

Xo1,o2,o3;

o1=newX();
o1.v1=10;
o2=o1;
o2.v2='k';

o1

10 k

v1v2

o2

o3

UFSCCTCINEINE5408EstruturasdeDados2008/1

Alocao Dinmica em Java Exemplo 2


MEMRIA

publicclassX{
publicintv1;
publiccharv2;
}

Xo1,o2,o3;

o1=newX();
o1.v1=10;
o2=o1;
o2.v2='k';
o3=newX();

o1

10 k

v1v2

o2

o3

v1v2

UFSCCTCINEINE5408EstruturasdeDados2008/1

Alocao Dinmica em Java Exemplo 2


MEMRIA

publicclassX{
publicintv1;
publiccharv2;
}

Xo1,o2,o3;

o1=newX();
o1.v1=10;
o2=o1;
o2.v2='k';
o3=newX();
o2=null;

o1

10 k

v1v2

o2

o3

v1v2

UFSCCTCINEINE5408EstruturasdeDados2008/1

Alocao Dinmica em Java Exemplo


1
2
MEMRIA

publicclassX{
publicintv1;
publiccharv2;
}
Xo1,o2,o3;
o1=newX();
o1.v1=10;
o2=o1;
o2.v2='k';
o3=newX();
o2=null;
o1=null;

o1

10 k

v1v2

o2

o3

v1v2

UFSCCTCINEINE5408EstruturasdeDados2008/1

Alocao Dinmica em Java Exemplo 2


publicclassX{
publicintv1;
publiccharv2;
}

Xo1,o2,o3;

o1=newX();
o1.v1=10;
o2=o1;
o2.v2='k';
o3=newX();
o2=null;
o1=null;
o3.v1=o1.v1;

MEMRIA

o1

10 k

v1v2

o2

o3

v1v2

NullPointerException
Fim

UFSCCTCINEINE5408EstruturasdeDados2008/1

Você também pode gostar