Malloc (): differenze tra le versioni

Da Gambas-it.org - Wikipedia.
Vai alla navigazione Vai alla ricerca
(Creata pagina con 'La funzione della libreria di C void *malloc (size_t size) alloca un'area di memoria per uso generico. Volendola utilizzare in Gambas, bisognerà dichiararla con ''Extern''...')
 
Nessun oggetto della modifica
 
(10 versioni intermedie di uno stesso utente non sono mostrate)
Riga 1: Riga 1:
La funzione della libreria di C
La funzione della libreria di C
  void *malloc (size_t size)
  void *malloc (size_t __size)
alloca un'area di memoria per uso generico.
alloca un'area di memoria per uso generico e restituisce un ''Puntatore'' ad essa, ossia restituisce una variabile contenente l'indirizzo della prima cella della predetta area di memoria riservata.
<BR>La differenza di "malloc()" e di "[[Calloc_()|calloc( )]]" è che "[[Malloc_()|malloc( )]]" non imposta la memoria a zero, laddove invece "calloc()" alloca la memoria riservata a zero.




Volendola utilizzare in Gambas, bisognerà dichiararla con ''Extern'', nonché bisognerà dichiarare la libreria di C: ''libc.so.6'', nella quale la funzione è contenuta:
Volendola utilizzare in Gambas, bisognerà dichiararla con ''Extern'', nonché bisognerà dichiarare la libreria di C: ''libc.so.6'', nella quale la funzione è contenuta:
  Private <FONT color=#B22222>Extern malloc</font>(size As Integer) As Pointer In "<FONT color=#B22222>libc:6</font>"
  Private <FONT color=#B22222>Extern malloc</font>(__size As Long) As Pointer In "<FONT color=#B22222>libc:6</font>"
 
 
Semplice esempio di uso in Gambas:
Semplice esempio di uso in Gambas:
  Library "libc:6"
  Library "libc:6"
   
   
  <FONT color=Gray>' ''void *malloc (size_t size)''
  <FONT color=Gray>' ''void *malloc (size_t __size)''
  ' ''Allocates the requested memory and returns a pointer to it.''</font>
  ' ''Allocate SIZE bytes of memory.''</font>
  Private <FONT color=#B22222>Extern malloc</font>(size As Integer) As Integer
  Private Extern <FONT color=#B22222>malloc</font>(__size As Long) As Pointer
   
   
  <FONT color=Gray>' ''void free(void* pointer)''
  <FONT color=Gray>' ''void free(void *__ptr)''
  ' ''Deallocates the memory previously allocated by a call to malloc.''</font>
  ' ''Free a block allocated by `malloc', `realloc' or `calloc'.''</font>
  Private Extern free_C(po As Pointer) <FONT color=#B22222>'''Exec "free"'''</font>
  Private Extern free_C(__ptr As Pointer) Exec "free"
   
   
   
   
  '''Public''' Sub Main()
  Public Sub Main()
    
    
   Dim p As Pointer
   Dim p As Pointer
  p = <FONT color=#B22222>malloc(SizeOf(gb.Byte) * 16)</font>
  If p == 0 Then Error.Raise("Impossibile allocare un'area di memoria !")
    
    
  p = <FONT color=#B22222>malloc(16)</font>
<FONT color=Gray>' Qui fa qualcosa con il puntatore creato......</font>
  If IsNull(p) Then Error.Raise("Impossibile allocare un'area di memoria !")
      
      
  free_C(p)
<FONT color=Gray>' ''Infine liberiamo l'area di memoria appena prima allocata:''</font>
   
  free_C(p)
  '''End'''
 
  End
 
 
 
=Riferimenti=
* https://linux.die.net/man/3/malloc
* http://stackoverflow.com/questions/1538420/difference-between-malloc-and-calloc

Versione attuale delle 15:18, 13 giu 2024

La funzione della libreria di C

void *malloc (size_t __size)

alloca un'area di memoria per uso generico e restituisce un Puntatore ad essa, ossia restituisce una variabile contenente l'indirizzo della prima cella della predetta area di memoria riservata.
La differenza di "malloc()" e di "calloc( )" è che "malloc( )" non imposta la memoria a zero, laddove invece "calloc()" alloca la memoria riservata a zero.


Volendola utilizzare in Gambas, bisognerà dichiararla con Extern, nonché bisognerà dichiarare la libreria di C: libc.so.6, nella quale la funzione è contenuta:

Private Extern malloc(__size As Long) As Pointer In "libc:6"

Semplice esempio di uso in Gambas:

Library "libc:6"

' void *malloc (size_t __size)
' Allocate SIZE bytes of memory.
Private Extern malloc(__size As Long) As Pointer

' void free(void *__ptr)
' Free a block allocated by `malloc', `realloc' or `calloc'.
Private Extern free_C(__ptr As Pointer) Exec "free"


Public Sub Main()
 
 Dim p As Pointer

 p = malloc(SizeOf(gb.Byte) * 16)
 If p == 0 Then Error.Raise("Impossibile allocare un'area di memoria !")
 
' Qui fa qualcosa con il puntatore creato......
   
' Infine liberiamo l'area di memoria appena prima allocata:
 free_C(p)
  
End


Riferimenti