Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 2
Ir a la página 1, 2  Siguiente
 
¿ Qué Ocupa Más ?. ¿ Array De Cadena O Una Cadena ?
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje ¿ Qué Ocupa Más ?. ¿ Array De Cadena O Una Cadena ? 
 
Hola!.

Si tuviera la posibilidad de tener tanto un array como en una variable de cadena los mismos datos.
¿ Qué ocuparía más ?. ¿ El array o la cadena ?.

¿ Qué ocupa más ?.
Dim valores as STRING[] = ["A","B","C","D"]
 


Ó

Dim valores as string = "ABCD"
 


Por lo que parece tenemos cuatro cadenas y en la otra es solo una.  
No podemos olvidar la longitud de  las cuatro cadenas.

¿ Qué hubieses preferido tú ?.

Saludos
 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
última edición por Shell el Lunes, 23 Noviembre 2015, 14:04; editado 2 veces 
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 ? 
 
Supongo que el array ocupa más, más punteros y más celdas de memoria vacías, pero en realidad no tengo ni pajolera idea. Vuott sabe de eso, seguro.
 




===================
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 ? 
 
Yo pienso igual que Shordi,,, seguro que ocupa más un array (sea cual sea el lenguaje de programación que usemos)
 




===================
Blog personal
Web: SoloGambas seleccion de articulos dedicados a Gambas
Visita el Curso de Gambas3 ¡¡¡Gratuito!!!
 
jsbsan - 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 ? 
 
Estos dos ejemplos hacen lo mismo, pero en uno usa un array y en el otro usa una cadena.

Con cadena:

Public Sub Main()

  Dim veces As Integer = 6
  Dim valores As String = "ABCD"
    
  repetir(veces, valores)
  
End

Public Sub repetir(n As Integer, valores As String)
  
  Dim x As Integer
  Dim pos As Integer = 1
  
  For x = 0 To n
    'Comprueba si ha llegado al último valor de la cadena
    If pos = Len(valores) + 1 Then
      'Para comenzar de cero
      pos = 1
      Print
    Endif
    Print Mid(valores, pos, 1);
    pos += 1    
  Next
    
End
 


Con un array:

Public Sub Main()

  Dim veces As Integer = 6
  Dim valores As String[] = ["A", "B", "C", "D"]
    
  repetir(veces, valores)
  
End

Public Sub repetir(n As Integer, valores As String[])
  
  Dim x As Integer
  Dim pos As Integer
  
  For x = 0 To n
    'Comprueba si ha llegado al último valor del array
    If pos = valores.Length Then
      'Para comenzar de cero
      pos = 0
      Print
    Endif
    Print valores[pos];
    pos += 1    
  Next
    
End
 


La salida de ambos es:

Citar:

ABCD
ABC


¿ Cuál sera más rápido ?. TicTacTicTac...

Según el perfilado:

Usando cadenas: 45uS, 67uS, 68uS, 50uS, 48uS. Un media de: 55,6 uS
Usando arrays: 60uS, 60uS, 59uS, 59uS, 59uS. Una media de: 59,4 uS . Debería ser algo más.

Los tamaños generados para crear el  ejecutable es el mismo. 1K1

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 ? 
 
¿Qué tal esto?

http://gambaswiki.org/wiki/comp/gb/object/sizeof?l=es


Puede que te saque de muchas dudas  

Saludos
 




===================
Jesús Guardón

Por favor, usemos el corrector ortográfico antes de pulsar el botón "Enviar".

"uo ǝs ʇɐu pıɟıɔıן ɐdɹǝupǝɹ ɐ dɹoƃɹɐɯɐɹ, soןo ɥɐʎ bnǝ dɹodouǝɹsǝןo"
 
jguardon - 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 ? 
 
Jesús:

Interesante.  

Con el array bien, con la cadena no se puede..

Si cambio el tipo y creo una estructura ya no sería una cadena, seria un objeto.
De todas formas esto de Object.Sizeof tiene que ser para pruebas de laboratorios y de programadores como Sheldon Cooper.  

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]
Con el array bien
..... Object.Sizeof


...y cuanto es el resultado de un array de cadenas usando Object.SizeOf() ?
 



 
última edición por vuott el Martes, 24 Noviembre 2015, 02:18; editado 1 vez 
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:

vuott escribió: [Ver mensaje]
Shell escribió: [Ver mensaje]
Con el array bien
..... Object.Sizeof


...y cuanto es el resultado de un array de cadenas usando Object.SizeOf() ?


Del array "valores" en concreto es 24 bytes. incluso vacío mide 24 bytes.

Saludos
 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
última edición por Shell el Martes, 24 Noviembre 2015, 10:24; 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]
incluso vacío mide 24 bytes.

Pues esto es una confirmación que en gambas la creación de un objeto significa ipso facto la ocupación de memoria.

Shell escribió: [Ver mensaje]
...es 24 bytes.

Recuerdo que tu tienes un sistema de 32-bit, el mi resultado, que tengo un sistema de 64-bit, es 40.

Este numero no cambia al cambiar del tipo de valor del array. Es decir que el resultado 24-40 es tal si el array es de tipo String[ ] o de tipo Byte[ ] o otro tipo.
En efecto, aquel valor se refiere a la area de memoria ocupada por el objeto "array", cualquiera sea su tipo.
Claro, pero, que al aumentar de los elementos de un array, se incrementa tambien la memoria ocupada por el almacenamiento de los datos contenido en cada elemento. La area de memoria del objeto no es la misma de la area de memoria donde son almacenados los datos del array: conexas, pero distintas.

De una análisis de esta area de memoria del objeto parece que esta sea constituida en parte por la Estructura struct OBJECT (contenida en el archivo header: gbx_object.h) y en parte por la Estructura struct CARRAY (contenida en el archivo header: gbx_c_array.h), y en particular por:
- un Puntero a la Estructura "struct _CLASS", contenida en el archivo header gbx_class.h;
- una variable de tipo intptr_t;
- dos variables de tipo Integer;
- una variable de tipo TYPE;
- un Puntero de tipo Byte.

Bueno, asì tenemos:
struct CLASS *class;   --> 4 byte (32bit) - 8 byte (64-bit) - Dice la clase de pertenencia del objeto (en este caso un "Array")
intptr_t ref;       --> 4 (32bit) - 8 (64-bit)    - (no importante)
int size;           --> 4 (32bit) - 4 (64-bit)    - Dice la cantidad de memoria que el tipo de dato del array ocupa.
int count;          --> 4 (32bit) - 4 (64-bit)    - Dice la cantidad de elementos contenidos por el array (es decir: array.Count)
TYPE type;          --> 4 (32bit) - 8 (64-bit)    - Dice el tipo de dato, al que la clase pertenece.
void *data;         --> 4 (32bit) - 8 (64-bit)    - Contiene los datos contenidos por el array.

La suma es 24 con un sistema de 32-bit y 40 con un sistema de 64-bit.

Podemos ver en gambas lo que he dicho (ejemplo solo para sistemas de 64 bit ! ):
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 39
    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 + 16)  ' "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 "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")

' 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 + 32)
    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

 



 
última edición por vuott el Miercoles, 25 Noviembre 2015, 11:36; editado 23 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 ? 
 
iospalo
 



 
última edición por vuott el Martes, 24 Noviembre 2015, 18:05; editado 2 veces 
vuott - Ver perfil del usuarioEnviar mensaje privado 
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 1 de 2
Ir a la página 1, 2  Siguiente

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado
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