Foros del Web » Programando para Internet » ASP Clásico »

Arrays en memoria

Estas en el tema de Arrays en memoria en el foro de ASP Clásico en Foros del Web. Hola a todos, alguien puede decirme como ASP guarda los arrays en memoria. Es decir, si tengo una matriz dispersa (no completamente llena) reserva todas ...
  #1 (permalink)  
Antiguo 05/11/2003, 05:36
 
Fecha de Ingreso: enero-2002
Mensajes: 153
Antigüedad: 22 años, 4 meses
Puntos: 0
Arrays en memoria

Hola a todos,
alguien puede decirme como ASP guarda los arrays en memoria. Es decir, si tengo una matriz dispersa (no completamente llena) reserva todas las posiciones en memoria o, como es de suponer, guarda únicamente las posiciones llenas con datos.
Gracias
  #2 (permalink)  
Antiguo 05/11/2003, 06:05
 
Fecha de Ingreso: mayo-2002
Mensajes: 66
Antigüedad: 22 años, 1 mes
Puntos: 0
Hola zmarquez:

Si no te he entendido mal te refieres a:

dim vector(10) ' Reservaría espacio en memoria contigua para 11 elementos (del 0 al 10 ambos inclusive)
__________________
Un saludo,

Alberto
  #3 (permalink)  
Antiguo 05/11/2003, 06:25
 
Fecha de Ingreso: enero-2002
Mensajes: 153
Antigüedad: 22 años, 4 meses
Puntos: 0
Si yo tengo este código:

....

dim a(100)

a(10)=18
a(20)=25
a(30)=8
a(40)=3
a(50)=67
a(60)=23
.....

¿cuanta memoria se utiliza?

¿100 posiciones o se utilizan las 6 qu están llenas?
  #4 (permalink)  
Antiguo 05/11/2003, 16:36
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 22 años, 5 meses
Puntos: 98
Segun yo, reserva en memoria las 100 posiciones...como no existe un tipo de dato explícito, si no mal recuerdo todas las variables son de tipo variant, por lo cual ocuparía los bytes necesarios para almacenar 100 indices de tipo variant....

Ahora a mi me surgió una duda:

Alguien sabe cuantos índices puede tener un array?? y en su caso para un array dinámico, reserva el máximo número de índices?

Salu2,
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #5 (permalink)  
Antiguo 06/11/2003, 02:28
 
Fecha de Ingreso: enero-2002
Mensajes: 153
Antigüedad: 22 años, 4 meses
Puntos: 0
Gracias por tu respuesta.
Entonces, en caso de reservar 100 posiciones es una mierda, ya que teniendo una matriz únicamente ocupada por 6 valores tenemos 100 posiciones de memoria ocupada.

Utilizando JScript se pueden definir los arrays de la siguiente manera:

a=new Array()

a[10]=2
a[20]=56
a[30]=32
a[40]=12
a[50]=98
a[60]=54

Al no indicarle ningún indice al definir el array, supongo que no debe almacenar más que los datos insertados en el array, es decir 6 integers.

Última edición por zmarquez; 06/11/2003 a las 02:47
  #6 (permalink)  
Antiguo 06/11/2003, 09:17
 
Fecha de Ingreso: mayo-2002
Mensajes: 66
Antigüedad: 22 años, 1 mes
Puntos: 0
Hola zmarquez:

Eso mismo pensaba yo hasta que he mirado la documentación y me he llevado una sorpresa @_@

Si añades a tu código esto:

alert("Longitud del array: " + a.length)

Verás que indica 61 (!)...

Las elementos del array a los que no asignes ningún valor contendrán todos un "null".
__________________
Un saludo,

Alberto
  #7 (permalink)  
Antiguo 06/11/2003, 09:50
Avatar de AlexNV  
Fecha de Ingreso: junio-2003
Ubicación: Madrid
Mensajes: 289
Antigüedad: 21 años
Puntos: 1
Yo estudié que los arrays, por definición, reservaban todo el espacio en memoria, independientemente de que estuvieran llenos o vacíos.
Si no quieres eso, podrías usar listas enlazadas, u otras estructuras de datos.
  #8 (permalink)  
Antiguo 07/11/2003, 09:34
 
Fecha de Ingreso: mayo-2002
Mensajes: 66
Antigüedad: 22 años, 1 mes
Puntos: 0
Como dice AlexNV podrías usar arrays asociativos:

a=new Array()

a["10"]=2
a["CodigoProducto"]=56
a["30"]=32
a["Leonardo"] = "Dantés"
a["40"]=12
a["ElTorico"] = "Bravo"
a["50"]=98
a["60"]=54

En este caso la longitud sería 8. Como pega tendrías que ya no te servirían los recorridos del tipo:

for (i = 0; i < a.length; i++)
{
// Hacer lo que sea con a[i]
}

Aunque, en cambio, podrías usar ésta otra forma:

for (var elemento in a)
{
// Hacer lo que sea con a[elemento]
}
__________________
Un saludo,

Alberto
  #9 (permalink)  
Antiguo 07/11/2003, 09:34
 
Fecha de Ingreso: enero-2002
Mensajes: 153
Antigüedad: 22 años, 4 meses
Puntos: 0
El tema de los arrays que reservan todo el espacio en memoria creo que es un tema opsoleto, o debería de serlo, ya que en los lenguajes modernos los arrays son dinámicos, es decir, utilizan la memoria justa y necesaria, y por esto pensaba que el ASP funcionaría igual.

Aunque haciendo pruebas con el código anterior, al acceder al array a[15] me devuelve un valor undefined y no un null. ¿Esto significa que ese valor no esta reservado?
  #10 (permalink)  
Antiguo 07/11/2003, 12:21
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 22 años, 5 meses
Puntos: 98
Tomado de
"Professional JavaScript"
Nigel McFarlane, Andrea Chiarelli, James de Carli. Sing Li.
Edit. Wrox pp.18

"Null y Undefined
El tipo Null, tiene solo un valor, null. El valor 'null' significa sin datos y es utilizado como un contenedor de una variable para dejarte saber que no hay nada útil ahí.

El tipo undefined es un poco mas complejo.
También tiene un valor 'undefined', pero con frecuencia es el mismo que null. Si el contenido de una variable no es claro, porque no se ha almacenado nada ahí (ni siquiera null), entonces es una variable de tipo undefined, pero por conveniencia, la mayor parte del tiempo actúa como si tuviera un valor null, A menos que estés haciendo algo muy avanzado, undefined significa con frecuencia malas noticias, pues tu script no está trabjando propiamente."

Es decir, es como si fuera un nulo sin serlo, pero por supuesto que tiene un tamaño...

Salu2,
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #11 (permalink)  
Antiguo 07/11/2003, 20:31
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 22 años, 5 meses
Puntos: 98
Cita:
El tema de los arrays que reservan todo el espacio en memoria creo que es un tema opsoleto, o debería de serlo, ya que en los lenguajes modernos los arrays son dinámicos, es decir, utilizan la memoria justa y necesaria, y por esto pensaba que el ASP funcionaría igual.
Es precisamente donde me surgió la interrogante, no se en otros lenguajes de programación, pero vamos a decir, Pascal...corriendo en Delphi, cuando tu declaras un array dinámico, reserva en memoria el máximo de índices posible para ese array (255), no dudaría que VB haga exactamente lo mismo...


Salu2,
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #12 (permalink)  
Antiguo 11/11/2003, 02:33
 
Fecha de Ingreso: enero-2002
Mensajes: 153
Antigüedad: 22 años, 4 meses
Puntos: 0
Gracias por vuestras respuestas.
En definitiva quedamos que tanto en Javascript, como en VBScript cuando declaro un array se reserva su longitud máxima, esté lleno o no.
En respuesta al tema de los lenguajes modernos y los arrays dinámicos, yo diría que Java utiliza arrays dinámicos reales, es decir, reserva únicamente la memoria necesaria para guardar los elementos con datos del array. Es posible que me equivoque y si es así que alguien lo comente.
Gracias
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:22.