P - Allocazione dinamica e liste Flashcards
Cosa significa allocazione?
Associazione di una parte di memoria
Quali tipologie di allocazione esistono?
Implicita, esplicita, dinamica
In che momento avviene l’allocazione dinamica?
In fase di esecuzione
A che tipo di regole sono soggette le variabili?
A regole di esistenza, memoria, visibilità
Che differenze ci sono tra variabili globali e locali in fatto di definizione?
- globali: sono definite fuori dalle funzioni e in generale nell’intestazione del file
- locali: sono definite all’interno delle funzioni
Che differenze ci sono tra variabili globali e locali in fatto di visibilità e come avviene il passaggio tra funzioni?
- globali: sono visibili ovunque e non si passano come parametri perché sono accessibili da tutti
- locali: sono visibili solo nella funzione relativa perciò bisogna passarle
Che differenze ci sono tra variabili globali e locali in fatto di esistenza?
- globali: sono permanenti
- locali: iniziano e cessano con le funzioni
Quali sono i passaggi per arrivare al codice eseguibile?
- si parte dal codice sorgente
- il COMPILATORE ne esegue un’analisi e genera il codice oggetto che è un file in linguaggio macchina che ha ancora riferimenti a funzioni di libreria
- il LINKER risolve questi riferimenti e anche i riferimenti tra i file
- e si ottiene il codice eseguibile che viene caricato in memoria dal LOADER che è un modulo del sistema operativo
Come sono disposte all’incirca le cose in memoria?
partendo dagli indirizzi bassi:
1. codice (istruzioni)
2. variabili globali
3. variabili locali e parametri: deallocate e allocate a ogni chiamata
4. heap: è la memoria dinamica a cui si accede solo tramite puntatore
Come si accede all’heap?
Solo tramite puntatore
Nel caso di allocazione automatica, come viene gestita la dimensione?
- è nota per le variabili locali e globali
- è calcolabile per vettori e matrici
Nel caso di allocazione automatica, che caratteristiche hanno le variabili globali?
Vengono allocate all’inizio del programma e restano in vita fino alla fine.
Ricordano i valori assegnati da funzioni.
L’attributo static limita la loro visibilità solo al file in cui sono definite.
Nel caso di allocazione automatica, che caratteristiche hanno le variabili locali?
Vengono allocate con i parametri formali nello Stack frame. Vengono deallocate alla fine di ogni chiamata e in generale non ricordano i valori precedenti a meno che non ci sia l’attributo static con il quale però vengono allocate con le variabili globali.
La visibilità è limitata alle funzioni in cui sono definite.
Cosa si può dire dell’istruzione void *malloc(size_t size)? A che libreria appartiene?
- stilib.h
- ritorna un puntatore che contiene l’indirizzo di memoria allocata
- ritorna NULL se non c’è spazio
- il puntatore ritornato è generico, opaco, quindi deve essere assegnato
- size è un intero che indica il numero di Byte da assegnare
- complessità O(1)
Dato struct stud e struct stud *s, allocare lo spazio per s.
s = (struct stud )malloc(sizeof(s));
s = (struct stud *)malloc(sizeof(struct stud));
Cosa si può dire dell’istruzione void *calloc(size_t n, size_t size);
- corrisponde a una malloc + azzeramento della memoria -> O(n)