[C con Clase] Matriz Bidimensional Dinamica

Salvador Pozo salvador en conclase.net
Lun Oct 29 10:17:52 CET 2012


Hola:

De nada. :)

AR> Este programa servirá para una matriz de 3268760x15, es decir, 25 
AR> elementos tomados de 15 en 15, que es realmente a donde quiero llegar??

En general no me parece buena idea confiar en la capacidad física de la máquina a la hora de diseñar un programa. Y menos cuando se trata de un problema relativamente sencillo. Sería diferente si estuviésemos creando una aplicación crítica, o de control de procesos, o lo suficientemente importante como para justificar la necesidad de un hardware concreto.

En principio, no deberías tener problemas con un programa que usa un array de 200 megas. Los sistemas operativos actuales pueden trabajar con un tamaño de memoria de 4 gigas (o al menos 2 para el usuario). Se trata de memoria virtual, así que en principio no importa demasiado si hay soporte físico para esa memoria, la que falta se toma de la caché de disco.

Ahora bien, si tuvieras problemas de memoria, hay formas de optimizar el espacio necesario para almacenar las combinaciones.

1) Estas usando enteros para almacenar cada elemento. Eso son 4 bytes por cada uno. Si en lugar de enteros usas caracteres (char o unsigned char), sólo necesitas la cuarta parte de la memoria, es decir, 50 megas.
2) Se puede empaquetar más, usando una estructura con campos de bits. Para codificar 25 elementos se necesitan 5 bits. Tomados de 15 en 15 son 75 bits. La estructura necesaria ocuparía 10 bytes. (Si no tenemos en cuenta el alineamiento de bytes, ya que en caso contrario, y en la práctica, esta solución puede ser ineficaz).

Hasta pronto.


-- 
Salvador Pozo (Administrador)
mailto:salvador en conclase.net


Más información sobre la lista de distribución Cconclase