Programación General > C/C++

 array muy grande

(1/2) > >>

kaskade:
Hola, Buenas noches.

Tengo un problema a la hora de crear un array bidimensional en C.

Necesito que el array guarde secuencias de números, pero el número de secuencias puede ser de varios miles de millones. Entiendo que ese 'varios miles de millones' no puede ser un int pero los números de las secuencias que guardará sí son int. Incluso si pruebo a usar punteros ( lo sé, es lo debería hacer, espero no tener que reescribir todo el programa ) tampoco puedo guardar en un número miles de millones de punteros ...

El caso es que necesito saber en todo momento cuántas secuencias llevo guardadas, así que sí me interesa guardar el número de secuencias ... pero no sé cómo hacerlo.

Espero haberme explicado.

Un saludo y muchas gracias de antemano!

m0skit0:
Puedes dividirlo en un array de arrays bidimensionales (un array tridimensional) por ejemplo.

kaskade:
O sea que, cada X arrays bidimensionales, cambie de elemento en el array de arrays ... así iría rellenando por ejemplo 'ints' y cada elemento del array de arrays serían 32768 arrays bidimensionales ... ¿te refieres a eso?

m0skit0:
Sí, pero creo que te estás confundiendo en otro tema. Que un array sea de tipo int no significa que sólo soporte 32768 elementos. Eso es el rango de cada elemento (si lo declaras como unsigned int tienes el doble de rango de número positivos pero sin números negativos). El array puede ser todo lo grande que quieras (hasta el máximo que permita size_t creo recordar). Por ejemplo:


--- Código: C ---// Reservando 2 GiB de memoriaint* a = (int*)malloc(0x80000000); // Comprobando que malloc() ha reservado la memoria requeridaif (a == NULL){    // Tratamiento de error}else{    // Inicializando el bloque con datos (ojo que puede llevar tiempo)    int i;    for (i = 0; i<0x80000000; i+=sizeof(int))    {        a[i] = i;    }} Aquí reservas 2 GiB de memoria y los rellenas con diferentes números. También puedes usar memset() si vas a tener grandes cachos de memoria con un mismo valor.

Saludos

kaskade:
Vaaaaaaale, probablemente me topo con la limitación de size_t. 1 millón me deja pero 10 millones ya no.

No es tan crítico guardar los datos como ir sabiendo esa cantidad en concreto, pero sé que tarde o temprano tendré que acabar guardando los datos para usarlos.

Muchas gracias por la respuesta !!!!

Un saludo!

Navegación

[0] Índice de Mensajes

[#] Página Siguiente

Ir a la versión completa