Gestione della memoria heap domande

Domande frequenti sulla gestione della memoria heap per studenti universitari in informatica, con risposte concise e chiare.

RiccardoDragonpz·64 schede·64 domande
universitàcomputer_scienceprogramming
0
Lo so
1 / 64
0
Sto imparando
Fronte

Cos'è la memoria heap?

Tocca per girare
Retro

È un'area di memoria dinamica utilizzata per l'allocazione di memoria durante l'esecuzione del programma.

Tocca per girare
Lo so
Sto imparando

Quiz(64 domande)

Domanda 1 di 64

1. Qual è la principale causa della frammentazione esterna nella memoria heap?

Termini in questo set(64)

Fondamenti della memoria heap(16)

Cos'è la memoria heap?

È un'area di memoria dinamica utilizzata per l'allocazione di memoria durante l'esecuzione del programma.

Heap vs Stack: differenze?

- Heap: allocazione dinamica, maggiore flessibilità. - Stack: allocazione statica, più veloce ma limitata.

Vero o falso: la memoria heap è sempre più veloce dello stack.

Falso. La memoria heap è generalmente più lenta rispetto allo stack a causa della gestione della memoria più complessa.

Quando si usa la memoria heap?

Quando la dimensione dell'oggetto non è nota a tempo di compilazione o quando la vita dell'oggetto deve superare il blocco corrente.

Quali linguaggi usano la memoria heap?

C, C++, Java, Python e molti altri linguaggi di programmazione.

Come si gestisce la memoria heap?

Utilizzando funzioni di allocazione come malloc in C o new in C++, seguite da free o delete per la deallocazione.

Qual è il problema principale della memoria heap?

La frammentazione, che può ridurre l'efficienza e aumentare i tempi di allocazione.

Cos'è l'allocazione dinamica?

È il processo di richiesta di memoria a runtime, permettendo una gestione flessibile delle risorse.

Esempio di allocazione in C:

```c int *ptr = (int*)malloc(sizeof(int)); ```

Causa → Effetto: memory leak.

Causa: non deallocare la memoria heap. Effetto: esaurimento della memoria disponibile.

Qual è il ruolo del garbage collector?

Rimuove automaticamente oggetti non più utilizzati dalla memoria heap, prevenendo memory leaks.

Vero o falso: la memoria heap è thread-safe per definizione.

Falso. La memoria heap non è thread-safe, è necessaria la sincronizzazione tra i thread.

Definisci 'frammentazione della memoria'.

È la suddivisione della memoria in blocchi non contigui, rendendo difficile l'allocazione di nuovi blocchi più grandi.

Qual è una strategia per ridurre la frammentazione?

Utilizzare una politica di allocazione che raggruppa gli oggetti simili o la riunificazione dei blocchi liberi.

Come si verifica la disponibilità della memoria heap?

Controllando il valore restituito dalle funzioni di allocazione. Se è NULL, la memoria non è disponibile.

Cos'è l'heap memory management?

La gestione della memoria heap implica l'allocazione e la deallocazione dinamica della memoria durante l'esecuzione di un programma. Si utilizza per oggetti di dimensione variabile. - Permette maggiore flessibilità - Rischio di memory leak - Richiede attenzione nella gestione.

Allocazione e deallocazione(16)

Che cos'è l'allocazione della memoria heap?

È il processo di riservare una porzione di memoria per uso dinamico, quando un programma ne ha bisogno.

Allocazione statica vs dinamica: differenze?

- Statica: dimensione fissa, durante la compilazione. - Dinamica: dimensione variabile, durante l'esecuzione.

Vero o falso: La memoria heap è gestita automaticamente dal sistema?

Falso. La memoria heap richiede una gestione manuale da parte del programmatore tramite allocazione e deallocazione esplicite.

Qual è il comando per allocare memoria in C?

La funzione 'malloc' viene utilizzata per allocare memoria nella heap.

Che cosa fa la funzione 'free'?

Libera la memoria precedentemente allocata, evitando perdite di memoria.

Cause di perdite di memoria?

- Non liberare memoria. - Doppia liberazione. - Scrittura oltre i limiti.

Quale funzione usa C++ per allocare memoria?

L'operatore 'new' è utilizzato in C++ per allocare memoria dinamicamente.

Fill in the blank: malloc() restituisce un puntatore a ___

un'area di memoria, se allocata con successo.

Che funzione serve per verificare la memoria allocata?

La funzione 'sizeof' può essere utilizzata per ottenere la dimensione di un tipo di dato.

Deallocazione automatica: è possibile?

No, la deallocazione della memoria heap deve essere gestita manualmente dal programmatore.

Esempio di allocazione e deallocazione in C:

int *array = (int *)malloc(10 * sizeof(int)); free(array);

Qual è la differenza tra 'new' e 'malloc'?

'new' in C++ chiama il costruttore, mentre 'malloc' non lo fa e restituisce void*.

Che succede se non si libera la memoria?

Si verifica una perdita di memoria, causando un aumento dell'uso della memoria nel tempo.

Allocare memoria per un array di strutture: esempio?

struct Point* points = (struct Point*)malloc(n * sizeof(struct Point));

Qual è il vantaggio della memoria heap?

Permette l'allocazione dinamica, adattando la memoria alle necessità del programma in esecuzione.

Che cos'è la frammentazione della memoria?

È la divisione della memoria in blocchi piccoli e non utilizzabili, causando inefficienza.

Problemi e ottimizzazione(16)

Qual è uno dei problemi comuni della memoria heap?

Fragmentazione: la memoria è suddivisa in blocchi non contigui, causando sprechi.

Vero o falso: La frammentazione esterna non influisce sulle performance.

Falso: può rallentare l'allocazione e aumentare il tempo di ricerca della memoria.

Cosa deve essere fatto per evitare perdite di memoria?

Deallocare la memoria non più necessaria usando free() o delete.

Qual è l'effetto della frammentazione interna?

Spazio non utilizzato all'interno di blocchi allocati, inefficienza nell'uso della memoria.

Confronta stack e heap in termini di gestione della memoria.

Stack: allocazione automatica, veloce. Heap: allocazione manuale, più lenta.

Quale strategia aiuta a minimizzare la frammentazione?

Compattazione: riunire i blocchi di memoria liberi per creare uno spazio contiguo.

Qual è una tecnica per ottimizzare l'allocazione della memoria?

Utilizzare pool di memoria: riutilizzare blocchi di memoria di dimensione fissa.

Qual è il problema delle allocazioni frequenti nella heap?

Sovraccarico di gestione della memoria, porta a bassa performance e frammentazione.

Completare: L'allocazione __________ crea un rischio di frammentazione.

dinamica: alloca memoria durante l'esecuzione del programma.

Qual è l'effetto di un eccesso di allocazione?

Diminuzione delle prestazioni e possibile esaurimento della memoria disponibile.

Qual è una causa comune di perdita di memoria?

Mancanza di deallocazione: non liberare memoria allocata che non viene più utilizzata.

Vero o falso: L'uso di garbage collection elimina completamente le perdite di memoria.

Falso: non è infallibile e non gestisce tutte le situazioni di perdita di memoria.

Come può la dimensione degli oggetti influenzare la memoria heap?

Oggetti più grandi aumentano il rischio di frammentazione e migliorano il sovraccarico.

Cosa si intende per 'buffer overflow'?

Scrivere oltre i limiti di un'area di memoria, causando corruzione dati o crash.

Qual è un esempio di ottimizzazione della memoria heap?

Utilizzare strutture dati come liste collegate per ridurre la frammentazione.

Qual è l'importanza della gestione della memoria heap?

Ottimizza le risorse di sistema e migliora le prestazioni dell'applicazione.

Strumenti e tecniche(16)

Quali strumenti usi per monitorare la memoria heap?

- Valgrind - GDB - Visual Studio Profiler - Perf

Qual è il ruolo del garbage collector?

Gestisce la memoria recuperando oggetti non più utilizzati. - Riduce perdite di memoria.

Valgrind → strumento per?

Monitorare l'uso della memoria, rilevando perdite e errori di accesso.

True or False: La memoria heap è statica.

False. È dinamica, permette allocazione e deallocazione durante l'esecuzione.

Quale comando usa GDB per analizzare la memoria heap?

Il comando 'print' può visualizzare il contenuto della memoria.

Fill the blank: Il _____ è un tool per la valutazione delle performance della memoria.

profiler

Cosa offre AddressSanitizer?

Rilevamento di errori di memoria e accessi non validi. - Integrazione con compilatori.

Qual è la differenza tra heap e stack?

Heap: gestione dinamica. Stack: gestione statica. - Diverse caratteristiche di allocazione.

Quando utilizzare strumenti di monitoraggio?

Quando si sospettano perdite di memoria o rallentamenti delle performance.

Qual è il fine del tool 'heaptrack'?

Analizzare le allocazioni di memoria heap e identificare perdite.

Strumento per visualizzare grafi di allocazione?

Massif, parte di Valgrind. - Fornisce analisi dettagliate.

Cosa fa un profiler di memoria?

Analizza l'uso della memoria in esecuzione. - Mostra statistiche e grafici.

True or False: La memoria heap è più veloce dello stack.

False. Lo stack è generalmente più veloce per l'allocazione.

Strumenti di debugging per memoria heap, esempio?

Electric Fence. - Semplice da usare per identificare errori.

Cosa significa 'memory leak'?

Perdita di memoria non recuperata, causa rallentamenti. - Può portare a crash.

Quale strumento usa per verificare la frammentazione?

Heap Profiling Tool. - Misura e analizza la frammentazione della memoria.

Domande in questo set(64)

1. Qual è la principale causa della frammentazione esterna nella memoria heap?

A.Allocazioni di diversa dimensione
B.Uso eccessivo di garbage collection
C.Allocazione statica della memoria
D.Mancanza di deallocazione

2. Che cosa si intende per 'memoria heap'?

A.È un'area di memoria dinamica per allocazione a runtime.
B.È un'area di memoria statica.
C.È la memoria utilizzata esclusivamente per variabili locali.
D.È la memoria utilizzata solo per la cache.

3. Quale strumento è specificamente progettato per rilevare perdite di memoria?

A.Valgrind
B.GCC
C.Make
D.Git

4. Quale funzione in C++ è utilizzata per deallocare la memoria allocata con 'new'?

A.delete
B.free
C.dealloc
D.dispose

5. Vero o falso: La frammentazione interna può causare un aumento dell'utilizzo della memoria.

A.Vero
B.Falso
C.Solo in caso di allocazioni grandi
D.Solo nei linguaggi non tipizzati

6. Qual è la principale differenza tra heap e stack?

A.L'heap è per allocazione dinamica, lo stack è per allocazione statica.
B.L'heap è più veloce dello stack.
C.Lo stack ha una dimensione illimitata.
D.L'heap è usato solo in linguaggi di basso livello.

7. Cosa si intende per 'frammentazione della memoria'?

A.Allocazione di memoria in blocchi non contigui
B.Uso eccessivo della memoria
C.Accessi non autorizzati alla memoria
D.Ottimizzazione delle performance

8. Che cosa indica un puntatore nullo dopo un'allocazione?

A.Memoria allocata con successo
B.Memoria non disponibile
C.Errore di sintassi
D.Variabile non inizializzata

9. Qual è la conseguenza principale di non deallocare la memoria?

A.Perdita di memoria
B.Incredibile velocità di esecuzione
C.Miglioramento delle performance
D.Riduzione della frammentazione

10. Vero o falso: l'allocazione della memoria heap è sempre più veloce dell'allocazione dello stack.

A.Vero
B.Falso
C.Dipende dal linguaggio di programmazione.
D.Solo se si usa C.

11. Qual è la funzione principale di un garbage collector?

A.Recuperare memoria non utilizzata
B.Aumentare la velocità della CPU
C.Compilare il codice sorgente
D.Ridurre la dimensione del codice

12. Qual è il principale svantaggio della memoria heap rispetto alla memoria stack?

A.Maggiore velocità
B.Gestione manuale
C.Accesso più semplice
D.Minor spazio disponibile

13. Quale delle seguenti strategie può ridurre la frammentazione interna?

A.Allocazione di oggetti di dimensioni simili
B.Utilizzo di allocazioni casuali
C.Aumento dell'allocazione dinamica
D.Riduzione delle allocazioni

14. Quando si dovrebbe preferire la memoria heap?

A.Quando la dimensione dell'oggetto è sconosciuta a tempo di compilazione.
B.Quando si vogliono evitare leak di memoria.
C.Quando si deve gestire solo variabili locali.
D.Quando si desidera allocare memoria molto velocemente.

15. Quale comando in GDB ti permette di visualizzare il contenuto della memoria?

A.show
B.print
C.info
D.list

16. Quale di queste opzioni NON è una causa di perdita di memoria?

A.Doppia liberazione
B.Non liberare memoria
C.Allocazione corretta
D.Scrittura oltre i limiti

17. Completare: L'allocazione di memoria __________ è più suscettibile alla frammentazione.

A.dinamica
B.statica
C.pre-allocata
D.contigua

18. Quale tra i seguenti linguaggi utilizza la memoria heap?

A.C
B.Assembly
C.HTML
D.CSS

19. Cosa fa l'AddressSanitizer?

A.Rileva perdite di memoria
B.Migliora la velocità di esecuzione
C.Genera report di performance
D.Rileva errori di accesso alla memoria

20. Quando si usa la funzione 'calloc' in C?

A.Perde memoria
B.Inizializza la memoria allocata a zero
C.Non allocare memoria
D.Rilascia la memoria

21. Qual è un segnale di avvertimento di un 'buffer overflow'?

A.Corruttore di dati
B.Alto utilizzo della CPU
C.Bassi tempi di risposta
D.Maggiore disponibilità di memoria

22. Qual è il metodo corretto per allocare memoria nella heap in C?

A.int *ptr = (int*)malloc(sizeof(int));
B.int *ptr = new int;
C.int ptr;
D.int *ptr = malloc(int);

23. Qual è uno svantaggio principale dell'uso della memoria heap rispetto alla memoria stack?

A.Meno spazio disponibile
B.Allocazione più lenta
C.Impossibilità di allocare grandi oggetti
D.Errori di accesso non rilevati

24. Quale operazione è necessaria dopo un'allocazione di memoria per evitare perdite?

A.Utilizzare la memoria
B.Deallocare con 'free'
C.Riassegnare il puntatore
D.Nessuna operazione necessaria

25. Qual è uno degli svantaggi di un'eccessiva allocazione di memoria?

A.Efficiente utilizzo delle risorse
B.Diminuzione delle prestazioni
C.Aumento della velocità di esecuzione
D.Riduzione della frammentazione

26. Qual è uno dei problemi principali associati alla memoria heap?

A.Frammentazione della memoria.
B.Allocazione statica.
C.Limitazione della dimensione della memoria.
D.Velocità di accesso.

27. Quale tra i seguenti strumenti è un profiler di memoria?

A.Heaptrack
B.Git
C.Docker
D.Make

28. Quale dei seguenti è un vantaggio dell'allocazione dinamica di memoria?

A.Uso fisso di memoria
B.Flessibilità nella dimensione
C.Maggiore complessità
D.Maggior controllo sul tipo

29. Qual è una tecnica per migliorare l'efficienza dell'allocazione?

A.Utilizzare pool di memoria
B.Allocare tutto in una volta
C.Evitare qualsiasi forma di deallocazione
D.Usare solo strutture dati semplici

30. Cos'è l'allocazione dinamica?

A.Richiesta di memoria a runtime.
B.Allocazione di memoria statica.
C.Gestione della memoria in stack.
D.Allocazione di memoria per variabili locali.

31. Qual è l'impatto di una 'memory leak'?

A.Aumento dell'accesso alla CPU
B.Incremento della velocità del programma
C.Rallentamenti e crash potenzialmente
D.Miglioramento delle performance

32. Che cosa accade se si tenta di liberare una memoria già deallocata?

A.Tutto funziona normalmente
B.Si verifica una perdita di memoria
C.Si genera un errore di runtime
D.L'applicazione si arresta

33. Qual è un effetto della garbage collection sulla memoria heap?

A.Riduce le perdite di memoria
B.Elimina la frammentazione
C.Aumenta il carico della CPU
D.Non ha alcun effetto

34. Qual è la causa principale di un memory leak?

A.Non deallocare la memoria heap.
B.Allocare troppa memoria stack.
C.Utilizzare variabili locali.
D.Usare solo memoria statica.

35. Quale strumento offre un'analisi dettagliata delle allocazioni di memoria?

A.Massif
B.GDB
C.Git
D.Docker

36. Quale funzione è utilizzata in C per allocare un array di interi?

A.malloc
B.calloc
C.realloc
D.alloca

37. Qual è uno degli obiettivi principali della gestione della memoria heap?

A.Massimizzare l'uso della CPU
B.Ottimizzare le risorse di sistema
C.Limitare l'allocazione dinamica
D.Aumentare la frammentazione

38. Qual è il ruolo di un garbage collector?

A.Rimuove oggetti non più utilizzati dalla heap.
B.Allocare memoria in modo statico.
C.Prevenire la frammentazione.
D.Aumentare la velocità dell'allocazione.

39. Quale delle seguenti affermazioni è vera riguardo la memoria heap?

A.È più veloce dello stack
B.È gestita staticamente
C.Permette allocazione dinamica
D.È limitata in dimensioni

40. Che cosa rappresenta la frammentazione della memoria?

A.Allocazione di troppa memoria
B.Memoria sprecata in blocchi piccoli
C.Memoria totalmente utilizzata
D.Rilasciamento di memoria non necessario

41. Cosa può causare un alto numero di allocazioni e deallocazioni?

A.Sovraccarico di gestione della memoria
B.Riduzione della frammentazione
C.Maggiore stabilità del sistema
D.Efficienza nell'uso della memoria

42. Vero o falso: la memoria heap è sicura per i thread per definizione.

A.Vero
B.Falso
C.Solo in Java.
D.Solo in C++.

43. Quale comando di Valgrind è utilizzato per monitorare l'uso della memoria?

A.valgrind --track-origins=yes
B.valgrind --check-leaks=yes
C.valgrind --track-allocs=yes
D.valgrind --memory-report=yes

44. Quale di queste affermazioni è vera riguardo 'malloc'?

A.Restituisce un ptr a un array di dimensione fissa
B.Inizializza la memoria a zero
C.Restituisce un ptr a void
D.Dealloca memoria

45. Qual è un esempio di strutture dati che possono aiutare a ridurre la frammentazione?

A.Liste collegate
B.Array statici
C.Heap di dimensioni fisse
D.Alberi binari non bilanciati

46. Cosa si intende per 'frammentazione della memoria'?

A.Suddivisione in blocchi non contigui.
B.Allocazione veloce di memoria.
C.Utilizzo esclusivo di stack.
D.Allocazione di memoria statica.

47. In quale scenario è opportuno utilizzare strumenti di monitoraggio della memoria?

A.Quando il programma è in fase di sviluppo
B.Quando ci sono performance ottimali
C.Quando si sospettano perdite di memoria
D.Quando non ci sono errori di sintassi

48. Quale di questi operatori è usato per allocare memoria in C++?

A.new
B.malloc
C.calloc
D.alloc

49. Vero o falso: La frammentazione interna è più problematica delle allocazioni eccessive.

A.Vero
B.Falso
C.Solo in alcuni linguaggi
D.Dipende dalla dimensione degli oggetti

50. Qual è una strategia per ridurre la frammentazione della memoria?

A.Raggruppare oggetti simili.
B.Usare solo memoria statica.
C.Evitare l'allocazione dinamica.
D.Allocare solo in stack.

51. Qual è la principale differenza tra memoria heap e stack?

A.Gestione statica vs dinamica
B.Spazio limitato vs illimitato
C.Velocità di accesso
D.Tipo di dati memorizzati

52. Cosa deve essere fatto dopo aver allocato un array di strutture?

A.Liberare la memoria
B.Inizializzare i puntatori
C.Accedere direttamente ai membri
D.Nessuna azione necessaria

53. Quale delle seguenti affermazioni è FALSA riguardo alla memoria heap?

A.La memoria heap è gestita manualmente
B.Può essere frammentata
C.È sempre più veloce dello stack
D.Richiede deallocazione esplicita

54. Come si verifica la disponibilità della memoria nella heap?

A.Controllando il valore restituito dalle funzioni di allocazione.
B.Controllando se la memoria è statica.
C.Controllando le variabili locali.
D.Usando solo malloc senza controlli.

55. Qual è l'obiettivo principale dell'uso di Electric Fence?

A.Ottimizzare le performance
B.Rilevare errori di accesso alla memoria
C.Compilare il codice
D.Analizzare la sorgente

56. Che differenza c'è tra 'malloc' e 'realloc'?

A.'malloc' ridimensiona la memoria
B.'realloc' alloca nuova memoria
C.'malloc' libera memoria
D.'realloc' sposta i dati

57. Quale delle seguenti affermazioni descrive meglio la frammentazione interna?

A.Si verifica quando gli oggetti allocati non utilizzano completamente lo spazio disponibile.
B.È causata dalla mancanza di deallocazione della memoria.
C.Si verifica quando i blocchi di memoria allocati sono contigui.
D.È il risultato di un numero ridotto di allocazioni nella heap.

58. Cos'è la gestione della memoria heap?

A.Allocazione e deallocazione dinamica durante l'esecuzione.
B.Gestione della memoria solo in stack.
C.Utilizzo di memoria statica.
D.Allocazione solo in C++.

59. Cosa significa 'heap fragmentation'?

A.Allocazione di memoria continua
B.Allocazione discontinua che causa inefficienze
C.Recupero automatico della memoria
D.Accesso rapido alla memoria

60. Quale affermazione è vera riguardo l'allocazione statica?

A.La dimensione può cambiare durante l'esecuzione
B.È decisa a tempo di compilazione
C.Non richiede risorse di memoria
D.È sempre più veloce della memoria heap

61. Quale delle seguenti opzioni non è un metodo efficiente per gestire la memoria nella heap?

A.Utilizzare la compattazione dei blocchi di memoria.
B.Allocare memoria in modo dinamico senza deallocare.
C.Implementare pool di memoria per riutilizzare blocchi.
D.Utilizzare strutture dati per minimizzare la frammentazione.

62. Quale delle seguenti affermazioni non è vera riguardo la memoria heap?

A.La memoria heap può causare frammentazione.
B.La memoria heap è utilizzata per allocare memoria statica.
C.La memoria heap è soggetta a gestione dinamica.
D.La memoria heap è più lenta rispetto allo stack.

63. Quale strumento è utile per analizzare le performance della memoria in tempo reale?

A.Perf
B.GDB
C.Make
D.Docker

64. Quale comando in C viene utilizzato per allocare memoria per un array di caratteri?

A.malloc
B.calloc
C.realloc
D.free

Set correlati

Crea il tuo set di studio

Carica un PDF, incolla le tue note o descrivi un argomento – l'IA genera schede, quiz e altro in pochi secondi.