Mer 21 Agosto, 10:03:39 - 2019

Autore Topic: Domanda 3 esame 20/09/2013  (Letto 1061 volte)

0 Utenti e 1 Visitatore stanno visualizzando questo topic.

Offline leomessi90

  • Studente di Dottorato
  • ***
  • Post: 212
  • FeedBack: +12/-7
    • Mostra profilo
Domanda 3 esame 20/09/2013
« il: Ven 06 Giugno, 12:29:51 - 2014 »
Citazione
Si consideri una lista collegata semplice contenente n nodi. Assumendo che ogni nodo
contenga un valore intero a 32 bit, quanto spazio di memoria effettivo verrà richiesto
al sistema operativo per la lista? Assumere una piattaforma a 64 bit e un allocatore di
memoria con header di 4 byte, allineamento a 16 byte del primo byte del payload del
blocco.

La risposta è 12+(n*16)?
io ho considerato il padding iniziale di 12 byte per allineare il payload al 16° byte, poi ho considerato il payload di 12 byte= 4(int)+8(puntatore a nodo succ.)
E' giusto?
<<Nell'anno 1969 è bastata la potenza di calcolo di due Commodore 64 per mandare con successo una navicella sulla Luna; nell'anno 2003 è necessario un Pentium 4 a 2000 Mhz per far funzionare Windows XP. Qualcosa deve essere andato storto>>

Offline aaabbb

  • Studente
  • *
  • Post: 22
  • FeedBack: +2/-0
    • Mostra profilo
Re:Domanda 3 esame 20/09/2013
« Risposta #1 il: Sab 07 Giugno, 11:52:11 - 2014 »
non potrebbe verificarsi che, nel caso l'allocatore utilizzi liste con intervalli, prima dell'allocazione del primo blocco della lista in memoria,  sia presente un blocco di  17 byte (4 byte di header, 13 di payload) a partire dal 12° byte ? In questo caso il primo blocco della lista inizia al 48° byte e richiede padding iniziale di 15 byte ((48 - 4) - 29).

Offline lm

  • Studente di Dottorato
  • ***
  • Post: 108
  • FeedBack: +11/-1
    • Mostra profilo
Re:Domanda 3 esame 20/09/2013
« Risposta #2 il: Lun 09 Giugno, 12:52:10 - 2014 »
La risposta è 12+(n*16)?
io ho considerato il padding iniziale di 12 byte per allineare il payload al 16° byte, poi ho considerato il payload di 12 byte= 4(int)+8(puntatore a nodo succ.)
E' giusto?

Si, a me è venuto lo stesso risultato!  8) 8)
Negli anni '60 il filosofo Dreyfus, agguerrito avversario dell'IA, aveva dichiarato che una macchina non avrebbe MAI saputo giocare bene a scacchi. Nel 1967 egli fu battuto da un programma chiamato MacHack. [..]

Offline lupin

  • Prof
  • Direttore di Dipartimento
  • ******
  • Post: 2804
  • FeedBack: +340/-14
    • Mostra profilo
Re:Domanda 3 esame 20/09/2013
« Risposta #3 il: Sab 14 Giugno, 17:11:16 - 2014 »
Una lista collegata avrà nodi della forma:

struct nodo {
    int elem;
    struct nodo* next;
};

Poiché ogni oggetto di k byte deve essere allineato a indirizzi multipli di k, sizeof(struct nodo) vale 16, che quindi è la size del payload di ogni blocco allocato per un nodo. Se la base di ogni blocco viene allineata a un indirizzo multiplo di 16 da malloc, allora abbiamo:

12 padding + [ 4 header + 16 payload ] + // primo nodo
12 padding + [4 header + 16 payload]  + // secondo nodo ...

quindi abbiamo 32*n byte.

Se istruissimo il compilatore a impaccare le struct senza garantire l'allineamento, otterremmo sizeof(struct nodo) == 12 e quindi la risposta 12+(n*16) sarebbe ragionevole.

@aaabbb: la domanda chiedeva lo spazio per la lista, non eventuali strutture dati richieste dall'allocatore.

Camil Demetrescu

"If you think education is expensive, try ignorance" (Robert Orben)

Offline Mahakam

  • Studente
  • *
  • Post: 13
  • FeedBack: +1/-0
    • Mostra profilo
Re:Domanda 3 esame 20/09/2013
« Risposta #4 il: Dom 15 Giugno, 17:48:25 - 2014 »
Il payload risulta essere 16 byte perché è composto da int = 4 byte + indirizzo = 8 byte + 4 byte di padding, corretto?
I anno, BIAR L-Z

Offline lupin

  • Prof
  • Direttore di Dipartimento
  • ******
  • Post: 2804
  • FeedBack: +340/-14
    • Mostra profilo
Re:Domanda 3 esame 20/09/2013
« Risposta #5 il: Dom 15 Giugno, 22:16:38 - 2014 »
Sì, la struct richiede 4 (int) + 4 (padding) + 8 (puntatore next) = 16 byte
Camil Demetrescu

"If you think education is expensive, try ignorance" (Robert Orben)

Offline xian89

  • Studente
  • *
  • Post: 46
  • FeedBack: +3/-1
    • Mostra profilo
Re:Domanda 3 esame 20/09/2013
« Risposta #6 il: Ven 05 Settembre, 12:33:48 - 2014 »
professore ma in questo caso se riordinassimo i campi della struct mettendo prima il puntatore e poi l'int, la size della struct e quindi del payload cambierebbe o comunque viene messo il pudding?
« Ultima modifica: Ven 05 Settembre, 13:06:29 - 2014 da xian89 »