|
Página 2 de 2
|
¿ Qué Ocupa Más ?. ¿ Array De Cadena O Una Cadena ?
Autor |
Mensaje |
shordi
Analista Programador
Registrado: Septiembre 2009
Mensajes: 4982
Edad: 64 Ubicación: Albacete
|
Re: ¿ Qué Ocupa Más ?. ¿ Array De Cadena O Una Cadena ?
=================== No podemos regresar
|
#11 Martes, 24 Noviembre 2015, 18:44 |
|
|
vuott
Analista Programador
Registrado: Agosto 2013
Mensajes: 2086
Edad: 60 Ubicación:
|
Re: ¿ Qué Ocupa Más ?. ¿ Array De Cadena O Una Cadena ?
... a administrar bases de datos...
...bases de datos... ? Que son ? ...comida ?
|
#12 Martes, 24 Noviembre 2015, 23:26 |
|
|
shordi
Analista Programador
Registrado: Septiembre 2009
Mensajes: 4982
Edad: 64 Ubicación: Albacete
|
Re: ¿ Qué Ocupa Más ?. ¿ Array De Cadena O Una Cadena ?
...bases de datos... ? Que son ? ...comida ?
Bueno... dan de comer, que no es poco. El tamaño de los punteros no. Definitivamente no.
=================== No podemos regresar
|
#13 Miercoles, 25 Noviembre 2015, 09:39 |
|
|
Shell
Analista Programador
Registrado: Marzo 2010
Mensajes: 5278
Edad: 53 Ubicación: Al otro lado de la pantalla
|
Re: ¿ Qué Ocupa Más ?. ¿ Array De Cadena O Una Cadena ?
Citar: Bueno... dan de comer, que no es poco. El tamaño de los punteros no. Definitivamente no.
Vuott:
Para hacer la versión de 32. He cambiado los valores del bucle. hasta un máximo de 24 bytes.
Como p3 me daba nulo hice estos cambios para que funcionase en la versión de 32.
En el bucle hasta 24 bytes
En la parte de entrar en la estructura no he cambiado nada.
Y en la parte de la estructura del objeto he cambiado:
' Ahora volvemos a la Estructura "OBJECT":
'Print "size: "; Int@(p1 + 16) ' "size" -> la dimensión del tipo de dato de el array
Print "size: "; Int@(p1 + 8) ' "size" -> la dimensión del tipo de dato de el array
'Print "count: "; Int@(p1 + 20) ' "count" -> la cantidad de elementos constituentes el array
Print "count: "; Int@(p1 + 12) ' "count" -> la cantidad de elementos constituentes el array
'Print "type: "; Long@(p1 + 24) ' "type" -> el tipo de datos de el array (Para saber a cuál tipo de dato corresponde el número en este miembro, hace falta ver los "gambas datatypes identifiers" en el file header "gambas.h")
Print "type: "; Long@(p1 + 16) ' "type" -> el tipo de datos de el array (Para saber a cuál tipo de dato corresponde el número en este miembro, hace falta ver los "gambas datatypes identifiers" en el file header "gambas.h")
' Entramos en la area de memoria apuntada por el miembro " * data" (donde son almacenados los datos contenidos de los elementos del Array):
p3 = Pointer@(p1 + 20)
La salida de la consola fue:
Citar:
=== Inspectio in vectore obiecto ===
Dimensión del array vacío: 24
Dimensión del array NO vacío: 24
0 F4
1 2C
2 7F
3 09
4 01
5 00
6 00
7 00
8 01
9 00
10 00
11 00
12 07
13 00
14 00
15 00
16 02
17 00
18 00
19 00
20 1C
21 A0
22 7F
23 09
--- 159319316
---
--- 1702132034
size: 1
count: 7
type: 684441710503133186
Datos en el array:
1 2 3 4 5 6 7
El código en versión 32 podría ser este:
' Puede ser la versión para 32 bits
Public Sub Main()
Dim vacuum As New Byte[]
Dim bb As Byte[] = [1, 2, 3, 4, 5, 6, 7]
Dim p1, p2, p3 As Pointer
Dim i As Integer
Dim st As Stream
Dim b As Byte
Print "=== Inspectio in vectore obiecto ===\n"
Print "Dimensión del array vacío: "; Object.SizeOf(vacuum) ' Obtiene la dimensión del array vacío
Print "Dimensión del array NO vacío: "; Object.SizeOf(bb) ' Obtiene la dimensión del array NO vacío
Print
' Entramos en la Estructura "OBJECT" del nuestro Array:
p1 = Object.Address(bb)
If IsNull(p1) Then Error.Raise("Error tremendus !")
st = Memory p1 For Read ' Muestra todos los byte de la area de memoria ocupada por el objeto "array"
For i = 0 To 23
Read #st, b
Print i, Hex(b, 2)
Next
st.Close
' Entramos en la Estructura "_CLASS":
p2 = Pointer@(p1)
If IsNull(p2) Then Error.Raise("Error tremendus !")
Print "\n---", Int@(p2 + 12) ' Numero de objetos instanciados con la Classe (en este caso Array)
Print "---", String@(Pointer@(p2 + 24)) ' Nombre de la Classe
Print "---", Int@(p2 + 152) ' Tambien aqui el tipo de datos de el array
Print
' Ahora volvemos a la Estructura "OBJECT":
Print "size: "; Int@(p1 + 8) ' "size" -> la dimensión del tipo de dato de el array
Print "count: "; Int@(p1 + 12) ' "count" -> la cantidad de elementos constituentes el array
Print "type: "; Long@(p1 + 16) ' "type" -> el tipo de datos de el array (Para saber a cuál tipo de dato corresponde el número en este miembro, hace falta ver los "gambas datatypes identifiers" en el file header "gambas.h")
' Entramos en la area de memoria apuntada por el miembro " * data" (donde son almacenados los datos contenidos de los elementos del Array):
p3 = Pointer@(p1 + 20)
If IsNull(p3) Then Error.Raise("Error tremendus !")
Print "Datos en el array:"
For i = 0 To bb.Max
Print Byte@(p3 + i),
Next
End
¿ Hay que cambiar algo en el p3 ?. ( p1 + 20 )
El type dio un valor raro.
Mmm..puntero...puteros...putoneros..son muy parecidas.
Saludos
=================== Gambas Básico
"No es un bug, es una característica no documentada"
última edición por Shell el Miercoles, 25 Noviembre 2015, 10:44; editado 1 vez
|
#14 Miercoles, 25 Noviembre 2015, 10:42 |
|
|
vuott
Analista Programador
Registrado: Agosto 2013
Mensajes: 2086
Edad: 60 Ubicación:
|
Re: ¿ Qué Ocupa Más ?. ¿ Array De Cadena O Una Cadena ?
Para hacer la versión de 32. He cambiado los valores del bucle. hasta un máximo de 24 bytes.
Está bien.
Vamos ahora a ver la salida de tu bucle de 32bit:
0 F4 <-- Puntero a la Estructura "_CLASS"
1 2C
2 7F
3 09
4 01 <-- (variable de tipo intptr_t)
5 00
6 00
7 00
8 01 <--- "size"
9 00
10 00
11 00
12 07 <--- "count"
13 00
14 00
15 00
16 02 <--- "type" (2 significa Byte !)
17 00
18 00
19 00
20 1C <-- Puntero a la area de memoria apuntada por el miembro " * data"
21 A0
22 7F
23 09
y más cambia Print "type: "; Long@(p1 + 16) con:
' Entramos en la Estructura "_CLASS":
p2 = Pointer@(p1)
If IsNull(p2) Then Error.Raise("Error tremendus !")
Print "\n---", Int@(p2 + 12) ' Numero de objetos instanciados con la Classe (en este caso Array)
Print "---", String@(Pointer@(p2 + 24)) ' Nombre de la Classe
Print "---", Int@(p2 + 152) ' Tambien aqui el tipo de datos de el array
Bueno, los valores deberían ser:
última edición por vuott el Miercoles, 25 Noviembre 2015, 11:34; editado 3 veces
|
#15 Miercoles, 25 Noviembre 2015, 11:24 |
|
|
Shell
Analista Programador
Registrado: Marzo 2010
Mensajes: 5278
Edad: 53 Ubicación: Al otro lado de la pantalla
|
Re: ¿ Qué Ocupa Más ?. ¿ Array De Cadena O Una Cadena ?
Vuott:
El cambio de:
Print "---", Int@(p2 + 152) ' También aquí el tipo de datos de el array
a
Print "---", Int@(p2 + 100) ' También aquí el tipo de datos de el array
¿ Cómo sabías que había que aplicar 100 en la versión de 32 ?.
Devuelve 2
¿ No llegaste a hacer para la comunidad italiana una guía "básica" sobre los punteros en gambas ?.
(Ejemplos simples).
Saludos
=================== Gambas Básico
"No es un bug, es una característica no documentada"
|
#16 Miercoles, 25 Noviembre 2015, 20:05 |
|
|
vuott
Analista Programador
Registrado: Agosto 2013
Mensajes: 2086
Edad: 60 Ubicación:
|
Re: ¿ Qué Ocupa Más ?. ¿ Array De Cadena O Una Cadena ?
El cambio de:
.......
Devuelve 2
Muuy bien !
¿ Cómo sabías que había que aplicar 100 en la versión de 32 ?
Se necesita hacer unos cálculos particulares de los byte de memoria ocupados por los miembros de la Estructura (escrita en C) struct _CLASS.
Si te interesa (pero tendrás que traducir de italiano), puedes leer este ladrillo que yo escribí en el WIKI del foro italiano:
http://www.gambas-it.org/wiki/index...rutture_esterne
Pero esta vez (en el caso de la Estructura struct _CLASS) el file header (que contiene esta Estructura) tiene comentarios que especifican los índices de la area de memoria de la Estructura donde empezan sus miembros.
¿ No llegaste a hacer para la comunidad italiana una guía "básica" sobre los punteros en gambas ?
...el WIKI del foro italiano es lleno de paginas que tratan de los Punterossss...
Saludos
última edición por vuott el Miercoles, 25 Noviembre 2015, 23:46; editado 5 veces
|
#17 Miercoles, 25 Noviembre 2015, 23:36 |
|
|
Shell
Analista Programador
Registrado: Marzo 2010
Mensajes: 5278
Edad: 53 Ubicación: Al otro lado de la pantalla
|
Re: ¿ Qué Ocupa Más ?. ¿ Array De Cadena O Una Cadena ?
Por cierto Vuott, con la cantidad de documentación que has escrito en la comunidad italiana, podías escribir un libro!.
Deberías conocer Lulu o parecidas.
https://www.lulu.com/es/
Saludos
=================== Gambas Básico
"No es un bug, es una característica no documentada"
|
#18 Jueves, 26 Noviembre 2015, 09:49 |
|
|
|
Temas parecidos
Temas parecidos
|
Página 2 de 2
|
Usuarios navegando en este tema: 0 registrados, 0 ocultos y 0 invitados Usuarios registrados conectados: Ninguno
|
No puede crear mensajes No puede responder temas No puede editar sus mensajes No puede borrar sus mensajes No puede votar en encuestas No puede adjuntar archivos Puede descargar archivos No puede publicar eventos en el calendario
|
|
|
|
|