Autore Topic: Visualizzare la dimensione delle varie variabili?  (Letto 2161 volte)

Offline El Berto

  • Grande Gambero
  • ***
  • Post: 148
    • Mostra profilo
Visualizzare la dimensione delle varie variabili?
« il: 11 Marzo 2013, 11:26:34 »
Mi stavo chiedendo se in qualche modo fosse possibile visualizzare la dimensione (spazio occupato in memoria) delle varie variabili.
C'è una finestra o un qualcosa di simile?
Grazie.

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.724
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Visualizzare la dimensione delle varie variabili?
« Risposta #1 il: 11 Marzo 2013, 11:32:09 »
Riguardo allo spazio di memoria occupato da ciascun tipo di variabile, proporrei questo paragrafo nella WIKI:
http://www.gambas-it.org/wiki/index.php/Le_Variabili#Tipi_di_variabili
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline El Berto

  • Grande Gambero
  • ***
  • Post: 148
    • Mostra profilo
Re: Visualizzare la dimensione delle varie variabili?
« Risposta #2 il: 11 Marzo 2013, 11:53:09 »
Mi sono spiegato male: supponiamo che la mia stringa sia "1234567890", sono 10 caratteri, quindi mi sembra 14 Bytes (dalla guida Wiki).
Oppure apro uno stream o un'immagine.
E'possibile conoscere quanto spazio occupa in memoria una variabile (stream, stringa, immagine, array....) in un dato momento?

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.724
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Visualizzare la dimensione delle varie variabili?
« Risposta #3 il: 11 Marzo 2013, 12:13:26 »
" Una stringa, formata da qualsiasi quantità di caratteri, occupa *sempre* 4 byte (in un sistema a 32bit); questo perché una stringa è in realtà un puntatore a una struttura più complessa che contiene, fra l'altro, la lunghezza della stringa. "
« Ultima modifica: 01 Febbraio 2022, 01:07:39 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline El Berto

  • Grande Gambero
  • ***
  • Post: 148
    • Mostra profilo
Re: Visualizzare la dimensione delle varie variabili?
« Risposta #4 il: 11 Marzo 2013, 13:26:46 »
Appunto: "a una struttura più complessa che contiene, fra l'altro, la lunghezza della stringa"

Per una stringa mi basterebbe fare un strlen (la stringa era giusto per esempio), ma per altre variabili più complesse?

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: Visualizzare la dimensione delle varie variabili?
« Risposta #5 il: 11 Marzo 2013, 16:17:19 »
Per una stringa mi basterebbe fare un strlen (la stringa era giusto per esempio), ma per altre variabili più complesse?

Non so perchè tu abbia tale necessità, ma a parte la peculiarità della variabile String, per tutte le altre la quantità di byte impegnata è segnata nella colonna "Memoria occupata" della tabella linkata da vuott.
Cosa intendi per variabili più complesse? La casistica è tutta riportata nella tabella citata poco prima. :ciao:
:ciao:

Offline El Berto

  • Grande Gambero
  • ***
  • Post: 148
    • Mostra profilo
Re: Visualizzare la dimensione delle varie variabili?
« Risposta #6 il: 11 Marzo 2013, 18:21:47 »
Allora, per alcune variabili la lunghezza è FISSA, per es. BOOLEAN è sempre 1 Byte.
Per una stringa, mi sembra di aver capito che occupa 4 Byte (fissi) + un numero di Byte che dipende dalla lunghezza della stringa; e comunque posso sapere la lunghezza della stringa con il comando String.len (non mi ricordo di preciso com'è).
Analogo per gli altri array.

Se poi vado a creare una classe personalizzata?
Se ho un array con 10 elementi, ogni elemento è costituito da 2 BOOLEAN, posso effettuare una stima (suppergiù 10*2 = 20 Bytes).
Ma come faccio a sapere ESATTAMENTE quanto occupa di spazio in memoria?
E se ho variabili più complesse?

Supponiamo inoltre che io utilizzi il comando DIR per ottenere una lista delle directory della mia cartella HOME (o una lista dei files), quanto mi occupa esattamente in memoria?


 

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.724
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Visualizzare la dimensione delle varie variabili?
« Risposta #7 il: 11 Marzo 2013, 18:31:40 »
Se poi vado a creare una classe personalizzata?
Se ho un array con 10 elementi, ogni elemento è costituito da 2 BOOLEAN, posso effettuare una stima (suppergiù 10*2 = 20 Bytes).

Perché dici "suppergiù" ?
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: Visualizzare la dimensione delle varie variabili?
« Risposta #8 il: 12 Marzo 2013, 00:41:54 »
Allora, per alcune variabili la lunghezza è FISSA, per es. BOOLEAN è sempre 1 Byte.
Per una stringa, mi sembra di aver capito che occupa 4 Byte (fissi) + un numero di Byte che dipende dalla lunghezza della stringa; e comunque posso sapere la lunghezza della stringa con il comando String.len (non mi ricordo di preciso com'è).

Scusa se ritorno a chiedere. Ma perchè vuoi sapere esattamente quanta memoria occupa, in termini di byte una variabile? Devi forse programmare a livello elementare? Io non lo so e non mi preoccupo più di tanto. Considera che la programmazione orientata agli oggetti, come Gambas, utilizza istruzioni complesse per gestire la parte grafica di un programma. Perciò dovresti anche preoccuparti di quanta memoria occupa una Form, con tutti gli oggetti grafici disegnati al suo interno. Secondo me "il gioco non vale la candela".

Il comando per conoscere la lunghezza di una stringa, comunque, è:
Codice: [Seleziona]
i= len(Stringa)
Però, se hai letto bene la citazione sull'argomento "Una stringa, formata da qualsiasi quantità di caratteri, occupa *sempre* 4 byte; questo perché una stringa è in realtà un puntatore a una struttura più complessa che contiene, fra l'altro, la lunghezza della stringa."
il n° complessivo di byte è si di 4 + la lunghezza della stringa, ma bisogna aggiungervi ancora il n° di byte contenente la lunghezza della stringa effettiva, all'interno delle celle di memoria contenenti la stringa stessa. Detto valore non è indicato.

« Ultima modifica: 12 Marzo 2013, 00:51:31 da Picavbg »
:ciao:

Offline El Berto

  • Grande Gambero
  • ***
  • Post: 148
    • Mostra profilo
Re: Visualizzare la dimensione delle varie variabili?
« Risposta #9 il: 12 Marzo 2013, 10:23:29 »
Dico "suppergiù" per indicare la dimensione approssimativa, senza fare il conto al byte.
No, la stringa era solo un esempio.
Tempo fa avevo aperto una discussione in cui mi ritrovavo la memoria piena e non riuscivo a capire come.
Ho provveduto a bloccare tutto: azzerare le stringhe, immagini, stream, array, ma ancora mi ritrovo la memoria piena.
In alcuni sistemi di sviluppo vi è una tabella contenente tutte le vartiabili e la dimensione che occupano in memoria, mi chiedevo se in Gambas ci fosse qualcosa di simile.

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Visualizzare la dimensione delle varie variabili?
« Risposta #10 il: 12 Marzo 2013, 12:35:36 »
Come accennato da picavbg, nella programmazione ad oggetti, tutto è un oggetto.

Quindi, non bisogna considerare le dimensioni del dato puro, ma anche della struttura che lo gestisce, appunto la classe.

Questa può essere definita con proprietà (variabili) e metodi (funzioni), le cui dimensioni hanno una forma che dipende da come è stata costruita a livello inferiore.

Calcolare le dimensioni occupate da un oggetto, in Gambas, è comlicato. In altri linguaggi, invece, è possibile farlo con funzioni ad-hoc. Già in C++/Java, e via dicendo, è possibile estrarle con un semplice size().

Comunque, sempre nella programmazione ad oggetti, le dimensioni di un'applicazione vengono in effetti prese il più delle volte molto sottogamba, perchè il supporto hardware lo permette, ma per mio conto è un concetto errato.

Ad ogni modo, la tua ricerca rischia di farti perdere la capa, a meno che non sia una semplice curiosità, in quanto non ti risolverebbe nulla a livello pratico.

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: Visualizzare la dimensione delle varie variabili?
« Risposta #11 il: 12 Marzo 2013, 14:01:30 »
Tempo fa avevo aperto una discussione in cui mi ritrovavo la memoria piena e non riuscivo a capire come.
Ho provveduto a bloccare tutto: azzerare le stringhe, immagini, stream, array, ma ancora mi ritrovo la memoria piena.

Le cause che possono provocare un intasamento della memoria possono essere diverse. Una può essere, per.es., l'uso ordinario di variabili globali, potrebbe anche dipendere da utilizzi di processi ricorsivi che impegnino sempre nuove zone di memoria, potrebbe  anche dipendere dall'attivazione di più Form, anche se non tutte servano.Potrebbe dipendere da uno scarso dimensionamento della partizione di swap, utilizzata per il paging dei programmi attivi in un determinato istante.
Ho citato un pò di concause, venute in mente in questo momento. Dovresti, secondo me, tenere sotto controllo il programma per capire, anche tramite il monitor di sistema, quando la memoria va in saturazione, quali e quanti oggetti sono attivamente impegnati.
 :ciao:
:ciao: