Crear matrices de strings - ¿Tamaño máximo?

Programando el Amstrad en BASIC, C, etc.
juamer
Lechoncillo
Lechoncillo
Mensajes: 14
Registrado: Mié 19 Oct , 2016 6:26 pm

Crear matrices de strings - ¿Tamaño máximo?

Mensajepor juamer » Vie 28 Oct , 2016 11:21 am

Buenas compañeros!

Llevo poco por aquí y una semana solo con el CPC464. Estoy intentando hacer un programilla. Tengo conocimientos de C por lo que el tema del orden y tal lo llevo bien.

Sin embargo me ha surgido un problema a la hora de crear una matriz de ciertas dimensiones. Las genero con DIM tabla$(------) y me da error a partir de (20,20,30). No se si es que la capacidad de amstrad se supera o es que se necesita otro comando para generarlas.

Si alguien tiene alguna idea, os lo agradecería mucho mucho :D

Muchas gracias de antemano.

Un saludo!

Avatar de Usuario
Artaburu
Trasteador
Trasteador
Mensajes: 8419
Registrado: Vie 07 Oct , 2005 6:18 pm
Ubicación: En tu pantalla

Re: Crear matrices de strings - ¿Tamaño máximo?

Mensajepor Artaburu » Vie 28 Oct , 2016 11:29 am

Tiene pinta de que te comes la memoria con esa pedazo matriz. Si solo fuera de un carácter almacenable en cada posición de la matriz serían ya 12kbs pero encima es tipo string ($).
Salu2,
Arta

juamer
Lechoncillo
Lechoncillo
Mensajes: 14
Registrado: Mié 19 Oct , 2016 6:26 pm

Re: Crear matrices de strings - ¿Tamaño máximo?

Mensajepor juamer » Vie 28 Oct , 2016 11:58 am

Tiene pinta de que te comes la memoria con esa pedazo matriz. Si solo fuera de un carácter almacenable en cada posición de la matriz serían ya 12kbs pero encima es tipo string ($).
Qué rapidez. Tendré que encontrar otro método :-k Porque no se puede limitar el número de caracteres, no? Es decir, si en vez de ser un string "infinito" ( de 256 caracteres, supongo, no?) lo hago finito, de 20, por ejemplo... no ocuparía tanta memoria... No tengo ni idea de si se puede hacer jajaja.

Un saludo y gracias!

Avatar de Usuario
Artaburu
Trasteador
Trasteador
Mensajes: 8419
Registrado: Vie 07 Oct , 2005 6:18 pm
Ubicación: En tu pantalla

Re: Crear matrices de strings - ¿Tamaño máximo?

Mensajepor Artaburu » Vie 28 Oct , 2016 12:04 pm

Con 20 caracteres también te iba a dar error. Ten en cuenta que la memoria libre que tienes en Basic no llega a 48kbs.

Si no es indiscreción, ¿Para que necesitas "tanta" memoria? Igual podemos encontrar alguna alternativa.
Salu2,
Arta

juamer
Lechoncillo
Lechoncillo
Mensajes: 14
Registrado: Mié 19 Oct , 2016 6:26 pm

Re: Crear matrices de strings - ¿Tamaño máximo?

Mensajepor juamer » Vie 28 Oct , 2016 12:12 pm

Ya se que tiene poca memoria, pero no la se calcular :oops: Y si no me equivoco, cuanta más memoria uses, más lento trabajará....

E indiscreción ninguna :wink:

Quiero hacer una tabla de referencias... jajaja Igual ha sido demasiado para la primera historia que monto con este codigo :lol: y como no conocía los límites prácticos del procesador, pues...

Un saludo!

juamer
Lechoncillo
Lechoncillo
Mensajes: 14
Registrado: Mié 19 Oct , 2016 6:26 pm

Re: Crear matrices de strings - ¿Tamaño máximo?

Mensajepor juamer » Vie 28 Oct , 2016 12:22 pm

Ya se que tiene poca memoria, pero no la se calcular :oops: Y si no me equivoco, cuanta más memoria uses, más lento trabajará....

E indiscreción ninguna :wink:

Quiero hacer una tabla de referencias... jajaja Igual ha sido demasiado para la primera historia que monto con este codigo :lol: y como no conocía los límites prácticos del procesador, pues...

Un saludo!
Me autocito, tampoco os comáis el coco. Lo estoy haciendo por aprender y por pasatiempo. Ya daré vueltas al problema a ver si lo puedo enfocar de otro modo, porque no necesito todas las cadenas que se generan :wink:

Avatar de Usuario
ronaldo
Forum Addict
Forum Addict
Mensajes: 358
Registrado: Sab 14 Sep , 2013 9:31 pm
Ubicación: Alicante
Contactar:

Re: Crear matrices de strings - ¿Tamaño máximo?

Mensajepor ronaldo » Jue 01 Dic , 2016 7:42 pm

Hola juanmer,

Comprobar lo que te ocupa en memoria una matriz es fácil, y calcularlo también, una vez conocemos los detalles. Además, es un ejercicio interesante para programar, así que vamos a los detalles:
  • Una matriz en memoria necesita espacio para: el símbolo, los índices y el contenido.
  • Supongamos que definimos la matriz pepe$(10): 3+4 bytes para el símbolo (pepe), 5 bytes para los índices(*), 33 bytes para el contenido (3 para cada uno de los 11 strings que van del 0 al 10). Total: 45 bytes.
  • ¡Ojo! Una matriz de strings sólo almacena 3 bytes por string que son: 1 byte para el tamaño que ocupa (0-255) y 2 bytes con un puntero a dónde empieza. Es decir, los strings reales no están almacenados ahí. El espacio se crea después, cuando se asigna un valor concreto.
En tu caso concreto, una matriz tabla$(20,20,30) ocuparía:
  • 8 bytes por el nombre del símbolo (tabla)
  • 9 bytes por los índices (al ser de 3 dimensiones. Siempre es +2 bytes por cada índice adicional)
  • 21*21*31*3 = 41.013 bytes por los punteros de los strings (sin los strings, claro está)
  • Total: 41030 bytes.
Comprobar que ocupa exactamente esto es fácil, usando la instrución "PRINT FRE(0)" que nos da la memoria libre que le queda a BASIC:
free.png
free.png (1.78 KiB) Visto 1213 veces
Evidentemente, en cuanto pongas un sólo índice más, ya no cabe en memoria :).

Espero que esto te ayude a entenderlo mejor :).

Un saludo!

(*) Por detallar. Los índices incluyen: 1 byte para el tipo de dato que la matriz almacena, 2 bytes para el puntero a donde empieza la matriz y 2 bytes adicionales por cada dimensión que tenga, para almacenar el tamaño de esa dimensión.

juamer
Lechoncillo
Lechoncillo
Mensajes: 14
Registrado: Mié 19 Oct , 2016 6:26 pm

Re: Crear matrices de strings - ¿Tamaño máximo?

Mensajepor juamer » Vie 14 Jul , 2017 12:48 am

Buuuf, anda que no hace que respondiste..

He tenido el cpc parado desde entonces, con la universidad no he dado a basto.

Muchas gracias por la respuesta de verdad. Muy interesante :D

Cuando tenga un rato libre y no sea tan tarde... lo echaré un ojo con más detenimiento, a ver si puedo pasarme por aquí un poco más O:)

Un saludo!


¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro


La Comunidad Española
ESP Soft, juegos para tu CPC Foro de Amstrad CPC Todos los juegos para CPC en un CD Web dedicada al Amstrad CPC (utilidades) Información útil para el CPC (talleres) Selección de juegos de Amstrad CPC Mundo CPC Pree Play then any Key CPC Basic