Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 2 de 2
Ir a la página Anterior  1, 2
 
¿ Qué Ocupa Más ?. ¿ Array De Cadena O Una Cadena ?
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje Re: ¿ Qué Ocupa Más ?. ¿ Array De Cadena O Una Cadena ? 
 
Vuott: El que sabe, sabe. El que no... a administrar bases de datos, que se decía en mi juventud.     
 




===================
No podemos regresar
 
shordi - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: ¿ Qué Ocupa Más ?. ¿ Array De Cadena O Una Cadena ? 
 
shordi escribió: [Ver mensaje]
... a administrar bases de datos...


...bases de datos... ? Que son ? ...comida ?  
 



 
vuott - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: ¿ Qué Ocupa Más ?. ¿ Array De Cadena O Una Cadena ? 
 
vuott escribió: [Ver mensaje]

...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
 
shordi - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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
For i = 0 To 23
  'For i = 0 To 39
    Read #st, b
    Print i, Hex(b, 2)
  Next
  st.Close
 


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 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: ¿ Qué Ocupa Más ?. ¿ Array De Cadena O Una Cadena ? 
 
Shell escribió: [Ver mensaje]
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:
Print "type:  "; Int@(p1 + 16)




Shell escribió: [Ver mensaje]
  
  '  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:
Print "\n---", Int@(p2 + 8)
Print "---", String@(Pointer@(p2 + 16))
Print "---", Int@(p2 + 100)

 



 
última edición por vuott el Miercoles, 25 Noviembre 2015, 11:34; editado 3 veces 
vuott - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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"
 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: ¿ Qué Ocupa Más ?. ¿ Array De Cadena O Una Cadena ? 
 
Shell escribió: [Ver mensaje]
El cambio de:
.......
Devuelve 2

Muuy bien !    


Shell escribió: [Ver mensaje]
¿ 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 dead 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.    


Shell escribió: [Ver mensaje]
¿ 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...  sisi


Saludos
 



 
última edición por vuott el Miercoles, 25 Noviembre 2015, 23:46; editado 5 veces 
vuott - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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"
 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 
OcultarTemas parecidos
Tema Autor Foro Respuestas último mensaje
No hay nuevos mensajes Separar Una Cadena De Texto En Hijos De Un... Cubel General 2 Viernes, 26 Febrero 2010, 18:26 Ver último mensaje
Cubel
No hay nuevos mensajes Meter En Un Array Cada Caracter De Una Cad... Cubel General 2 Miercoles, 31 Julio 2013, 13:40 Ver último mensaje
Cubel
No hay nuevos mensajes ¿ Una Cadena Vacía Es Una Subcadena De C... Shell General 2 Jueves, 07 Agosto 2014, 14:01 Ver último mensaje
Shell
No hay nuevos mensajes Capitalizar Una Cadena Shell Aplicaciones/Fragmentos de Código 10 Martes, 31 Julio 2018, 16:25 Ver último mensaje
tincho
 

Publicar nuevo tema  Responder al tema  Página 2 de 2
Ir a la página Anterior  1, 2

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 0 invitados
Usuarios registrados conectados: Ninguno


 
Lista de permisos
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



  

 

cron