| Autore |
Discussione  |
|
|
Tiamat
Utente giovane

Regione: Puglia
Prov.: Foggia
Città: Cerignola
|
Inserito il - 28/12/2004 : 20:57:09
|
|
E' un argomento che mi ha causato un bel po' di problemi all'esonero,non ho capito bene come si fa a calcolare la dimensione del record di attivazione relativo ad un sottoprogramma quando questo viene attivato;c'è qualcuno che potrebbe aiutarmi,non so,con un esempio.grazie
|
Il dio dei Draghi |
|
|
tremenda
Utente assiduo
  

Regione: Puglia
Prov.: Ba
Città: Bari
|
Inserito il - 29/12/2004 : 12:05:55
|
Esempio: function f(n:integer):integer;
Record di attivazione: 1 word x il nome della funzione (indirizzo dove è contenuto il codice) 0 word per le variabili locali (ovviamente xkè nn ci sono!) 1 word per i paramentri (in questo caso il solo n) 1 word per il punto di ritorno 1 word per la catena statica 1 word per la catena dinamica
Note: - Se i parametri sono passati per valore occupano solo 1 word xò nel caso degli array ad esempio di 10 elementi occupa 10 word - Nel passaggio per referenza si ha sempre una word anche quando si ha un array!
Ps sei del corso b? |
"And I feel that love is dead I'm loving angels instead..."
|
 |
|
|
nicux
Sottonicux
   

Regione: Estero
Prov.: Zara
Città: Citta'
|
Inserito il - 29/12/2004 : 12:29:14
|
Citazione: Messaggio inserito da tremenda
Esempio:
- Se i parametri sono passati per valore occupano solo 1 word xò nel caso degli array ad esempio di 10 elementi occupa 10 word
non proprio, se 1 word è la memoria utilizzata dal sistema per codificare gli indirizzamenti non ha nulla a che vedere (se non per pura coincidenza) con la memoria allocata per gli integer o per qualunque altro tipo. In effetti per tutti gli elementi del record che rappresentano un indirizzo allora la dimensione è sempre la stessa cioè 1 word (il cui valore in bit varia da sistema a sistema), mentre gli elementi del record che rappresentano un valore di qualche tipo occuperanno una memoria che dipende dal tipo (e certamente indipendente dalla word di cui sopra). |
gia' e non ancora... |
 |
|
|
tremenda
Utente assiduo
  

Regione: Puglia
Prov.: Ba
Città: Bari
|
Inserito il - 29/12/2004 : 12:43:21
|
Vabbè io ho ripetuto le parole della prof... |
"And I feel that love is dead I'm loving angels instead..."
|
 |
|
|
Tiamat
Utente giovane

Regione: Puglia
Prov.: Foggia
Città: Cerignola
|
Inserito il - 29/12/2004 : 18:35:52
|
Cioè,se non ho capito male,tutti i componenti del record che sono indirizzi sono lunghi 1 word mentre i valori veri e propri dipende dal tipo di dato,giusto? Ma per quanto riguarda il campo "Legami tra parametri formali e effettivi" cosa devo fare? Se ho variabili locali di tipo non primitivo devo indicare il loro peso in base al tipo ma devo anche indicare un indirizzo(cioè 1 word) per il riferimento?
PS:faccio TPS |
Il dio dei Draghi |
 |
|
|
nicux
Sottonicux
   

Regione: Estero
Prov.: Zara
Città: Citta'
|
Inserito il - 29/12/2004 : 19:07:56
|
Citazione: Messaggio inserito da Tiamat
Cioè,se non ho capito male,tutti i componenti del record che sono indirizzi sono lunghi 1 word mentre i valori veri e propri dipende dal tipo di dato,giusto?
giusto
Citazione:
Ma per quanto riguarda il campo "Legami tra parametri formali e effettivi" cosa devo fare?
per ogni parametro formale una 1 word che contiene il riferimento
Citazione:
Se ho variabili locali di tipo non primitivo devo indicare il loro peso in base al tipo ma devo anche indicare un indirizzo(cioè 1 word) per il riferimento?
no, solo la memoria necessaria per contenere il valore, perchè i riferimenti presenti nel record sono solo quelli che riguardano entità esterne alla funzione.
Citazione:
PS:faccio TPS
ah... vuoi la nostra ammirazione o la nostra solidarietà?    |
gia' e non ancora... |
 |
|
|
Tiamat
Utente giovane

Regione: Puglia
Prov.: Foggia
Città: Cerignola
|
Inserito il - 30/12/2004 : 17:57:43
|
Grazie credo che ora l'argomento mi sia più chiaro
PS:.....perchè solidarietà? |
Il dio dei Draghi |
 |
|
|
nicux
Sottonicux
   

Regione: Estero
Prov.: Zara
Città: Citta'
|
Inserito il - 30/12/2004 : 20:33:46
|
Citazione: Messaggio inserito da Tiamat
Grazie credo che ora l'argomento mi sia più chiaro
PS:.....perchè solidarietà?
scherzavo :P |
gia' e non ancora... |
 |
|
|
Tiamat
Utente giovane

Regione: Puglia
Prov.: Foggia
Città: Cerignola
|
Inserito il - 31/12/2004 : 16:24:33
|
Scusate se rompo ancora, potresti dirmi se ho fatto bene questo piccolo esercizio?Grazie
Supposizioni: - 1 word = 2 Byte - Il tipo intero occupa 3 Byte ******************************************************************************************* public bancaccount(double[] initialBalance,Point x) { int balance= 13; Point punto= new point(3,6); ... }
Record di Attivazione: 1 word per l'indirizzo del nome del sottoprogramma; 1 word per la catena statica; 7 word per i legami tra parametri formali ed effettivi(initialBalance è un vettore di 6 elementi di tipo primitivo, 1 word è usata per il riferimento al parametro di tipo Point); 1 word per il punto di ritorno; 3 Byte per la vriabile locale balance; 1 word per la variabile locale punto;
TOTALE: <<25 Byte>>
Giusto? |
Il dio dei Draghi |
 |
|
|
nicux
Sottonicux
   

Regione: Estero
Prov.: Zara
Città: Citta'
|
Inserito il - 31/12/2004 : 16:28:04
|
none...
se il parametro è passato per riferimento significa che stai passando l'indirizzo e non il valore quindi nel record devi fare spazio ad un semplice indirizzo e non a tutta la struttura dati. Capì? |
gia' e non ancora... |
Modificato da - nicux in data |
 |
|
|
Tiamat
Utente giovane

Regione: Puglia
Prov.: Foggia
Città: Cerignola
|
Inserito il - 01/01/2005 : 12:12:18
|
Credo di si, ho fatto così perchè ,se ho capito bene, double[] initialBalance che è un vettore di tipo primitivo va passato per valore e visto che sono sei elementi viene usata una word per elemento = 6 Word. Point x invece che è un oggetto viene passato per riferimento e per questo che ho usato solo una word. E a questo che ti riferivi?
PS:in java i valori di tipo primitivo vengo passati per valore, mentre i valori che per tipo hanno una classe vengo passati per riferimento |
Il dio dei Draghi |
 |
|
|
nicux
Sottonicux
   

Regione: Estero
Prov.: Zara
Città: Citta'
|
Inserito il - 01/01/2005 : 13:20:34
|
aspetta, chiariamo un po' di cose
1) double[] non è primitivo (il fatto che i suoi elementi sono di tipo primitivo è irrilevante) 2) anche fosse primitivo il tuo calcolo è errato perchè non fai alcuna ipotesi sulla dimensione di un double (che sarebbe poi da moltiplicare per sei) 3) e in ogni caso se un parametro viene passato per valore non ha alcun senso conservare nel record di attivazione un legame col parametro formale. 4) in java sintatticamente tutto viene passato per valore, il problema è che il compilatore decide lui il da farsi ;)
|
gia' e non ancora... |
 |
|
|
Tiamat
Utente giovane

Regione: Puglia
Prov.: Foggia
Città: Cerignola
|
Inserito il - 06/01/2005 : 20:59:04
|
Quindi l'errore sta nel parametro []Double? Se il Double come tipo occupasse 2 word visto che passo per valore un vettore di tipo double di 6 elementi occuperebbe in totale 12 word,giusto?se invece venisse passato per riferimento verrebbe occupata solo una word per tutto il vettore. Giusto |
Il dio dei Draghi |
 |
|
|
nicux
Sottonicux
   

Regione: Estero
Prov.: Zara
Città: Citta'
|
Inserito il - 07/01/2005 : 01:00:27
|
certo, passare un parametro per riferimento significa passare un indirizzo (che vale 1 word indipendentemente da quello che ci trovi a quell'indirizzo, cioè indipendentemente dal fatto che a quell'indirizzo ci sia un int oppure un vettore di un milione di elementi).
|
gia' e non ancora... |
 |
|
|
Tiamat
Utente giovane

Regione: Puglia
Prov.: Foggia
Città: Cerignola
|
Inserito il - 08/01/2005 : 10:33:59
|
Invece se fosse passato per valore un vettore di tipo intero di 5 elementi,nel caso in cui il tipo INT occupasse 1 word,verrebe occupato uno spazio pari a 5 word..credo di aver capito.Grazie |
Il dio dei Draghi |
 |
|
|
enzobidi
Nuovo Utente
Regione: Puglia
Prov.: Bari
|
Inserito il - 15/01/2005 : 10:59:51
|
Salve a tutti. potete indicarmi qualche link o dispense sull'argomento "record di attivazione" grazie
|
 |
|
|
Aiace
Piccolo Cinema Onirico
 
Regione: Puglia
Prov.: Bari
|
|
|
Vincent Vega
Utente giovane


Regione: Puglia
Prov.: Bari
Città: Bari
|
Inserito il - 01/02/2005 : 18:22:57
|
Scusate l'intrusione ma anke io ho un po' di difficoltà con l'argomento. Nelle slides fornite dal prof, oltre tutte le word occupate dai vari punti elencati, vi è una parte che dice "Riferimento all'area di memoria in cui è memorizzato il corpo di istruzioni da eseguire"
Qualche anima pia può per favore espletare questo punto? Grazie, ciau |
I'm a Respectable Son Of A Bitch |
 |
|
|
nicux
Sottonicux
   

Regione: Estero
Prov.: Zara
Città: Citta'
|
Inserito il - 01/02/2005 : 19:07:00
|
Citazione: Messaggio inserito da Vincent Vega
Scusate l'intrusione ma anke io ho un po' di difficoltà con l'argomento. Nelle slides fornite dal prof, oltre tutte le word occupate dai vari punti elencati, vi è una parte che dice "Riferimento all'area di memoria in cui è memorizzato il corpo di istruzioni da eseguire"
Qualche anima pia può per favore espletare questo punto? Grazie, ciau
è l'indirizzo di memoria in cui il compilatore ha iniziato a memorizzare le istruzioni del corpo della procedura/funzione.
Immagina la sequenza di istruzioni di un programma come una sequenza di codici binari memorizzati consecutivamente in una certa area di memoria. Ad un certo punto, prima del termine del programma incontri il codice (i-esima istruzione) di una chiamata di funzione, ma tale funzione è memorizzata in un'altra area di memoria a cui occorre saltare ogni volta che questa viene invocata. Questo indirizzo a cui occorre saltare è rappresentato dal nome della procedura/funzione invocata, quindi il record di attivazione deve contenerlo (specie se la procedura/funzione è ricorsiva).
|
gia' e non ancora... |
 |
|
|
Tiamat
Utente giovane

Regione: Puglia
Prov.: Foggia
Città: Cerignola
|
Inserito il - 15/02/2005 : 18:36:38
|
scusate l'ulteriore domanda, per le variabili globali si deve ragionare come per i parametri? Grazie. |
Il dio dei Draghi |
 |
|
| |
Discussione  |
|