Differenze tra le versioni di "Conoscere la quantità di memoria occupata dai tipi di dati di C e la loro locazione nei file header"

Da Gambas-it.org - Wikipedia.
Riga 1: Riga 1:
 
Per sapere la quantità di memoria occupata dai tipi di dati di C e Linux e la loro locazione nei rispettivi file header .h, è possibile utilizare il seguente codice:
 
Per sapere la quantità di memoria occupata dai tipi di dati di C e Linux e la loro locazione nei rispettivi file header .h, è possibile utilizare il seguente codice:
 +
<FONT Color=gray>' ''long Dim_Tipo(void)''
 +
' ''Restituisce la quantità di memoria occupata dal tipo di valore cercato.''</font>
 
  Private Extern Dim_Tipo() As Long In "/tmp/libTipo"
 
  Private Extern Dim_Tipo() As Long In "/tmp/libTipo"
 
   
 
   

Versione delle 20:05, 10 nov 2016

Per sapere la quantità di memoria occupata dai tipi di dati di C e Linux e la loro locazione nei rispettivi file header .h, è possibile utilizare il seguente codice:

' long Dim_Tipo(void)
' Restituisce la quantità di memoria occupata dal tipo di valore cercato.
Private Extern Dim_Tipo() As Long In "/tmp/libTipo"


Public Sub Main()

 Dim header As String[] = ["/usr/include/x86_64-linux-gnu/bits/types.h",
                           "/usr/include/x86_64-linux-gnu/sys/types.h",
                           "/usr/include/linux/types.h",
                           "/usr/include/stdint.h"]      ' I file header nei quali si cercherà il tipo di dato impostato
 Dim perc, s, tipo, ex As String
 Dim ss As String[]
 Dim sh As Short
 Dim d As Byte
   
  tipo = "u_int"   ' Qui va impostato il tipo di dato da cercare (in questo esempio cercheremo il tipo di dato 'u_int')
     
  Print "Inizio ricerca:\n\n"
   
  For Each perc In header
    s = File.Load(perc)
     
    ss = Split(s, "\x0A")
     
    sh = ss.Find("* " & tipo & ";", gb.Like)
     
    If sh > -1 Then
      Print "  " & ss[sh]
      Print "\n      nel file header: '" & perc & "' - riga:";; sh + 1
       
      Write "\n\nTermina ricerca ? ('s + Invio' per terminare, altrimenti solo 'Invio')\r"
      Input ex
      If ex = "s" Then Exit
      Write Space(80) & "\r"
    Endif
     
  Next
     
  Write "Fine ricerca" & Space(50)
     
  d = CByte(DimensioneTipo(tipo))
  
  Print "Il tipo di dato '" & tipo & "' occupa [ "; d; " ] byte di memoria."
    
End


Private Procedure DimensioneTipo(tp As String) As Long
 
 File.Save("/tmp/libTipo.c", "#include <bits/types.h>" &
           "\n#include <sys/types.h>" &
           "\n#include <linux/types.h>" &
           "\n#include <stdint.h>" &
           "\n\nlong Dim_Tipo() {" &
           "\n\n   return sizeof(" & tp & ");" &
           "\n}")
           
 Shell "gcc -o /tmp/libTipo.so /tmp/libTipo.c -shared -fPIC" Wait
 
 Return Dim_Tipo()
 
End