(07-09-2022, 01:07)tincho escribió: luego todos tienen 32 bits
Si la máquina es de 64 bits, entonces el tipo de datos
unsigned long ocupa 8 bytes (
64 bits).
unsigned level:6 ; ------
unsigned :1 ; |
unsigned complex:1 ; | 16 bit en total
unsigned type:7 ; |
unsigned deleted:1 ;----
unsigned short words ; 16 bit
unsigned long xlow ; 64 bit
unsigned long ylow ; 64 bit
unsigned long zlow ; 64 bit
unsigned long xhigh ; 64 bit
unsigned long yhigh ; 64 bit
unsigned long zhigh ; 64 bit
} Elm_hdr ;
La Estructura ocupa en total
56 Byte.
(07-09-2022, 01:24)vuott escribió: se redondea a la palabra (word) de la máquina, que suele ser igual a la de un "int" (como Integer en Gambas)
Bueno, prueba este codigo en Gambas para ver la memoria ocupada por una pequeña Estructura, formada por solo los 5 Campos de la tu Estructura 'Elm_hdr':
Código:
Private Extern calculus() As Long In "/tmp/campos"
Public Sub Main()
Dim l As Long
Creaso()
l = calculus()
Print "Tamaño en total de los Campos de la Estructura 'Solo_Campos': \e[1m"; l; "\e[0m byte"
End
Private Procedure Creaso()
File.Save("/tmp/campos.c", "typedef struct {\n" &
" unsigned level:6 ;\n" &
" unsigned :1 ;\n" &
" unsigned complex:1 ;\n" &
" unsigned type:7 ;\n" &
" unsigned deleted:1 ;\n" &
"} Solo_Campos;\n\n" &
"long int calculus() {\n" &
" return sizeof(Solo_Campos);\n}")
Shell "gcc -o /tmp/campos.so /tmp/campos.c -shared" Wait
End
En una maquina de 64bit el resultado del tamaño de esta pequeña Estructura es = 4 bytes (32 bits), como ya he escrito, especificados como sigue:
16 bits ocupados por los 5 Campos + 16 bits no ocupados.
(...pero que en la real Estructura "Elm_hdr" serán ocupados por el Miembro
unsigned short words).