Conoscere la quantità di memoria occupata dai tipi di dati di C e la loro locazione nei file header
Da Gambas-it.org - Wikipedia.
Versione del 10 nov 2016 alle 20:05 di Vuott (Discussione | contributi)
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