La gestió de memòria és un aspecte crucial en qualsevol llenguatge de programació, i ALGOL no és una excepció. En aquest tema, explorarem com ALGOL maneja la memòria, incloent l'assignació i l'alliberament de memòria, així com les tècniques per optimitzar l'ús de la memòria en els programes.

Continguts

Introducció a la Gestió de Memòria

La gestió de memòria en ALGOL implica controlar com es reserva i s'allibera la memòria durant l'execució d'un programa. Això inclou:

  • Assignació de memòria: Reservar espai en memòria per a variables, arrays, registres, etc.
  • Alliberament de memòria: Retornar la memòria al sistema operatiu quan ja no es necessita.
  • Optimització de l'ús de memòria: Minimitzar l'ús de memòria per millorar l'eficiència del programa.

Assignació Estàtica vs. Dinàmica

Assignació Estàtica

L'assignació estàtica es realitza en temps de compilació. Això significa que la quantitat de memòria necessària per a una variable o estructura de dades es determina abans de l'execució del programa.

Exemple:

begin
    integer a;
    real b;
    a := 10;
    b := 20.5;
end;

En aquest exemple, la memòria per a les variables a i b es reserva en temps de compilació.

Assignació Dinàmica

L'assignació dinàmica es realitza en temps d'execució, permetent que el programa reservi memòria segons sigui necessari durant la seva execució.

Exemple:

begin
    integer array a[1:10];
    real array b[1:20];
    ! La memòria per als arrays 'a' i 'b' es reserva en temps d'execució
end;

Punteres i Memòria Dinàmica

Els punteres són variables que emmagatzemen adreces de memòria. Són essencials per a l'assignació dinàmica de memòria.

Exemple:

begin
    integer pointer p;
    new(p); ! Assigna memòria dinàmica per a un enter
    p^ := 100; ! Assigna el valor 100 a la memòria apuntada per 'p'
end;

En aquest exemple, new(p) reserva memòria per a un enter i p^ accedeix a la memòria apuntada per p.

Alliberament de Memòria

És important alliberar la memòria dinàmica quan ja no es necessita per evitar fuites de memòria.

Exemple:

begin
    integer pointer p;
    new(p);
    p^ := 100;
    dispose(p); ! Allibera la memòria reservada per 'p'
end;

En aquest exemple, dispose(p) allibera la memòria reservada per p.

Exemples Pràctics

Exemple 1: Assignació i Alliberament de Memòria

begin
    integer pointer p;
    new(p);
    p^ := 50;
    print(p^); ! Mostra 50
    dispose(p);
end;

Exemple 2: Arrays Dinàmics

begin
    integer array pointer p;
    new(p, 1:10); ! Assigna memòria per a un array d'enters de 10 elements
    for i := 1 step 1 until 10 do
        p[i] := i * 2;
    for i := 1 step 1 until 10 do
        print(p[i]);
    dispose(p);
end;

Exercicis

Exercici 1

Escriu un programa en ALGOL que assigni memòria dinàmica per a un array de 5 elements, assigni valors als elements i després alliberi la memòria.

Solució:

begin
    integer array pointer p;
    new(p, 1:5);
    for i := 1 step 1 until 5 do
        p[i] := i * 3;
    for i := 1 step 1 until 5 do
        print(p[i]);
    dispose(p);
end;

Exercici 2

Escriu un programa en ALGOL que utilitzi punteres per assignar i alliberar memòria per a una variable real.

Solució:

begin
    real pointer p;
    new(p);
    p^ := 25.75;
    print(p^);
    dispose(p);
end;

Conclusió

En aquest tema, hem explorat la gestió de memòria en ALGOL, incloent l'assignació estàtica i dinàmica, l'ús de punteres i l'alliberament de memòria. La comprensió d'aquests conceptes és essencial per escriure programes eficients i evitar problemes com les fuites de memòria. En el següent tema, aprofundirem en la concurrència en ALGOL.

© Copyright 2024. Tots els drets reservats