PDF de programación - Prácticas de Programación - La memoria

Imágen de pdf Prácticas de Programación - La memoria

Prácticas de Programación - La memoriagráfica de visualizaciones

Publicado el 14 de Diciembre del 2018
668 visualizaciones desde el 14 de Diciembre del 2018
126,9 KB
11 paginas
Creado hace 12a (09/04/2012)
Prácticas de Programación

La memoria

© 2012 Xavier Baró Solé – Prácticas de Programación – www.uoc.edu

La memoria





La memoria es el recurso de la maquina que nos permite almacenar información de forma
temporal. Es un recurso escaso, y debe ser gestionado correctamente.
Generalmente, la memoria se representa en forma de vector.



Las posiciones se asumen continuas.
Las posiciones se enumeren, obteniendo las direcciones, como las casas dentro de una
calle. Las direcciones se suelen mostrar en formato Hexadecimal. La dirección de una
variable se accede con el operador &.

0
1
2
3
4

n

...

© 2012 Xavier Baró Solé – Prácticas de Programación – www.uoc.edu

La memoria





Cada posición puede almacenar un byte. Por lo tanto, una variable puede ocupar mas de una
posición, según su tipo, la máquina y el sistema operativo que estemos utilizando.
A continuación se muestra un ejemple de la evolución de la memoria con un código simple.

char a;
int b;
char c[2]:

a=‘i’
b=4;
c[0]=‘h’;
c[1]=a;

a

b

c

0
1
2
3
4
5
6

Se asignan posiciones de memoria libres a cada
variable. Se asume char (1 byte) e int=float (4 bytes)

© 2012 Xavier Baró Solé – Prácticas de Programación – www.uoc.edu

La memoria





Cada posición puede almacenar un byte. Por lo tanto, una variable puede ocupar mas de una
posición, según su tipo, la máquina y el sistema operativo que estemos utilizando.
A continuación se muestra un ejemple de la evolución de la memoria con un código simple.

char a;
int b;
char c[2]:

a=‘i’
b=4;
c[0]=‘h’;
c[1]=a;

a

b

c

0
1
2
3
4
5
6

i

4

h
a

Se cambia el valor del contenido de las posiciones
de memoria asociadas a cada variable.

© 2012 Xavier Baró Solé – Prácticas de Programación – www.uoc.edu

La memoria



Cuando declaramos una variable, el nombre de esta variable se asigna a la dirección de
memoria de su primera posición. Por ejemplo, en el ejemplo anterior,
las direcciones
correspondientes a las variables declaradas, obtenidas con el operador &, serian:

char a;
int b;
char c[2]:

a=‘i’
b=4;
c[0]=‘h’;
c[1]=a;

a

b

c

0
1
2
3
4
5
6

i

4

h
a

&a = 0
&b = 1

c = &(c[0]) = 5 (*)

(*) El caso de la variable c es ligeramente distinto, lo
veremos mas adelante, cuando hablemos de punteros.

© 2012 Xavier Baró Solé – Prácticas de Programación – www.uoc.edu

La memoria



c

struct {

float x,y;

} coordenadas;

Cuando trabajamos con tuplas, la memoria funciona exactamente de la misma forma, siendo el
tamaño de la tupla la suma de los tamaños de sus campos(*). Por ejemplo,
la tupla
coordenadas, quedaría de éste modo:
0
1
2
3
4
5
6
7

coordenadas c;
c.x=3.1f;
c.y=0.5f;

&c = 0

&(c.x) = 0
&(c.y) = 4

x

y

3.1f

0.5f

(*) Algunos sistemas ajustan el tamaño múltiples de n bytes, por lo que la tupla puede
tener un tamaño ligeramente mayor. Esto se conoce como “Alineación de memoria”.

© 2012 Xavier Baró Solé – Prácticas de Programación – www.uoc.edu

La memoria





Para conocer el tamaño exacto en bytes de un tipo de datos, se utiliza sizeof. Esta función nos retorna el valor
exacto, teniendo en cuenta el sistema en el que nos encontramos y el compilador utilizado.
A continuación se muestran unos cuantos ejemplos que podéis probar. Intentad entender los resultados y de
donde sale cada tamaño. Podéis intentar hacer el dibujo de la memoria en cada caso.

char c[26];
struct {

int nCaracteres;
char caracteres[26];

} linea1;
struct {

int nCaracteres;
char caracteres[30];

} linea2;
struct {

char caracteres[13];
int nCaracteres;
char caracteres2[13];

} linea3;
printf("a) El tamaño de un tipo <%s> es %d bytes\n","char",sizeof(char));
printf("b) El tamaño de un tipo <%s> es %d bytes\n","int",sizeof(int));
printf("c) El tamaño de un tipo <%s> es %d bytes\n","float",sizeof(float));
printf("d) El tamaño de un tipo <%s> es %d bytes\n","char[26]",sizeof(c));
printf("e) El tamaño de un tipo <%s> es %d bytes\n","linea1 => [ int + char[26] ]",sizeof(linea1));
printf("f) El tamaño de un tipo <%s> es %d bytes\n","linea2 => [ int + char[30] ]",sizeof(linea2));
printf("g) El tamaño de un tipo <%s> es %d bytes\n","linea3 => [ char[13] + int + char[13] ]",sizeof(linea3));

© 2012 Xavier Baró Solé – Prácticas de Programación – www.uoc.edu

La memoria

Autoaveluación:
1. Dibuja la memoria para el siguiente código:

int b;
char a;

a=‘A’
b=(int)a;

2. Dibuja la memoria para el siguiente código :

float a;

a=1.23f;

3. Dibuja la memoria para el siguiente código :

float a[2];

a[0]=1.23f;
a[1]=2.0f;

© 2012 Xavier Baró Solé – Prácticas de Programación – www.uoc.edu

La memoria

Autoevaluación:
4. Dibuja la memoria para el siguiente código:

coordenada c[2];
c[0].x=10.0f;
c[0].y=20.0f;
c[1].x=30.0f;
c[1].y=40.0f;

5. Dibuja la memoria para el siguiente código:

Struct {

coordenada p1,p2;

} vector;
vector v1;
v1.p1.x=10.0f;
v1.p1.y=20.0f;
v1.p2.x=v1.p1.y+10.0f:
v1.p2.y=v1.p1.x+30.0f:

© 2012 Xavier Baró Solé – Prácticas de Programación – www.uoc.edu

La memoria

Autoevaluación (Respuesta):
1. Dibuja la memoria para el siguiente código:

b

0

1

2

3

int b;
char a;

a=‘A’
b=(int)a;

65

a

a

4

‘A’

2. Dibuja la memoria para el siguiente código:

float a;

a=1.23f;

3. Dibuja la memoria para el siguiente código:

0

1

2

3

1.23f

a

float a[2];

a[0]=1.23f;
a[1]=2.0f;

0

1

2

3

4

5

6

7

1.23f

2.0f

© 2012 Xavier Baró Solé – Prácticas de Programación – www.uoc.edu

La memoria

Autoevaluación (Respuesta):
4. Dibuja la memoria para el siguiente código:

coordenada c[2];
c[0].x=10.0f;
c[0].y=20.0f;
c[1].x=30.0f;
c[1].y=40.0f;

1
2
10.0f
5. Dibuja la memoria para el siguiente código :

0

x

c[0]

3

4

p1

3

4

y

5
6
20.0f

y

5
6
20.0f

c

c[1]

x

y

8

7

9 10 11 12 13 14 15
30.0f

40.0f

v1

p2

x

y

8

7

9 10 11 12 13 14 15
30.0f

40.0f

Struct {

coordenada p1,p2;

} vector;
vector v1;
v1.p1.x=10.0f;
v1.p1.y=20.0f;
v1.p2.x=v1.p1.y+10.0f:
v1.p2.y=v1.p1.x+30.0f:

0

x

1
2
10.0f

© 2012 Xavier Baró Solé – Prácticas de Programación – www.uoc.edu
  • Links de descarga
http://lwp-l.com/pdf14529

Comentarios de: Prácticas de Programación - La memoria (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad