Differenze tra le versioni di "Assegnare ad un Puntatore un'area di memoria riservata con Alloc()"

Da Gambas-it.org - Wikipedia.
Riga 2: Riga 2:
 
  <FONT Color=#B22222>Alloc</font>(Dimensione As Variant, Count As Integer) As Pointer
 
  <FONT Color=#B22222>Alloc</font>(Dimensione As Variant, Count As Integer) As Pointer
 
L'area di memoria allocata viene puntata da una variabile di tipo ''Puntatore'' restituita dalla funzione ''Alloc()''. Il ''Puntatore'' referenzia una determinata porzione di memoria pari al prodotto del valore dei due argomenti della funzione ''Alloc()'' medesima. Questa variabile di tipo ''Puntatore'', potendo essere considerata come una chiave di accesso all'allocazione di memoria, consente di gestire tale area di memoria riservata.
 
L'area di memoria allocata viene puntata da una variabile di tipo ''Puntatore'' restituita dalla funzione ''Alloc()''. Il ''Puntatore'' referenzia una determinata porzione di memoria pari al prodotto del valore dei due argomenti della funzione ''Alloc()'' medesima. Questa variabile di tipo ''Puntatore'', potendo essere considerata come una chiave di accesso all'allocazione di memoria, consente di gestire tale area di memoria riservata.
 +
<BR>In particolare la funzione ''Alloc( )'' alloca la quantità di memoria richiesta e restituisce una variabile di tipo ''Puntatore'', ossia una variabile contenente l'indirizzo della prima cella dell'area di memoria riservata in questione.
  
 
La memoria allocata rimane intatta fino a quando il programma non termina.
 
La memoria allocata rimane intatta fino a quando il programma non termina.

Versione delle 10:38, 13 dic 2016

Per riservare un'area di memoria, si può utilizzare la funzione Alloc():

Alloc(Dimensione As Variant, Count As Integer) As Pointer

L'area di memoria allocata viene puntata da una variabile di tipo Puntatore restituita dalla funzione Alloc(). Il Puntatore referenzia una determinata porzione di memoria pari al prodotto del valore dei due argomenti della funzione Alloc() medesima. Questa variabile di tipo Puntatore, potendo essere considerata come una chiave di accesso all'allocazione di memoria, consente di gestire tale area di memoria riservata.
In particolare la funzione Alloc( ) alloca la quantità di memoria richiesta e restituisce una variabile di tipo Puntatore, ossia una variabile contenente l'indirizzo della prima cella dell'area di memoria riservata in questione.

La memoria allocata rimane intatta fino a quando il programma non termina.


Proprio in questo senso il Puntatore è una variabile di tipo generico, in quanto punta ad un'area di memoria di dimensione non pre-definita nativamente da Gambas (come invece è per quella delle altre variabili: Byte che occupa 1 byte, Short che occupa 2 byte, Integer che occupa 4 byte, e così via).


Liberare la memoria precedentemente allocata

Per liberare (deallocare) la porzione di memoria, precedentemente allocata, è necessario usare la funzione Free():

Free(puntatore)


Uso di Alloc() con i valori numerici

Se la funzione Alloc() viene utilizzata con valori numerici, allora essa alloca un'area di memoria avente la dimensione indicata dal valore numerico moltiplicata per l'intero eventualmente indicato nella variabile Conta. Come valore predefinito la variabile Conta è uguale a 1:

Alloc(Dimensione AS Integer[, Conta AS Integer ]) As Pointer


Esempio essenziale:

Public Sub Main()
 
 Dim p As Pointer
 
' Alloca un'area di memoria pari a 1x64 byte:
  p = Alloc(SizeOf(gb.Byte), 64)
  
' Dealloca l'area di memoria precedentemente riservata:
  Free(p)
  
End


Uso di Alloc() con le stringhe

Se la funzione Alloc() viene utilizzata con valori di tipo stringa, essa alloca un'area di memoria contenente la stringa indicata

Alloc(Stringa As String)  As Pointer

La dimensione dell'area di memoria allocata è uguale alla lunghezza della stringa più un ulteriore byte necessario al terminatore di stringa che è il carattere NULL.

Esempio essenziale:

Public Sub Main()
 
 Dim p As Pointer
 
' Alloca un'area di memoria con una Stringa:
  p = Alloc("Stringa qualsiasi")
  
' Dealloca l'area di memoria precedentemente riservata:
  Free(p)
  
End