Sto implementando un programma sequenziale per l'ordinamento come quicksort. Vorrei testare le prestazioni del mio programma in una vasta gamma di 1 o 10 miliardi di interi. Ma il problema è che ottengo un errore di segmentazione a causa delle dimensioni dell'array.Come dichiarare e utilizzare enormi matrici di 1 miliardo di interi in C?
Un codice di esempio di dichiarazione di questa matrice:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 1000000000
int main(int argc, char **argv)
{
int list[N], i;
srand(time(NULL));
for(i=0; i<N; i++)
list[i] = rand()%1000;
return 0;
}
ho avuto una proposta di utilizzare la funzione mmap. Ma non so come usarlo? qualcuno può aiutarmi a usarlo?
Sto lavorando su Ubuntu 10.04 64-bit, gcc versione 4.4.3.
Grazie per le vostre risposte.
Quanta memoria fisica ha il tuo computer? – BlueCode
@BlueCode: Probabilmente non importa; è la memoria virtuale che conta; non tutta la memoria allocata nello spazio degli indirizzi di un processo deve essere immediatamente supportata dalla RAM. –
prova a metterlo nell'heap invece della pila. È probabile che la dimensione massima dello stack sia limitata dal runtime del sistema operativo o c – pm100