Wdrażam sekwencyjny program do sortowania jak quicksort. Chciałbym przetestować wydajność mojego programu w ogromnej ilości 1 lub 10 miliardów liczb całkowitych. Ale problemem jest to, że otrzymuję błąd segmentacji ze względu na rozmiar tablicy.Jak deklarować i używać ogromnych tablic o wielkości 1 miliarda w C?
Próbkę kodu deklaracji tej tablicy:
#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;
}
Dostałem propozycję korzystania z funkcji mmap. Ale nie wiem, jak z niego korzystać? Czy ktoś może mi pomóc go użyć?
Pracuję nad 64-bitowym systemem Ubuntu 10.04, gcc w wersji 4.4.3.
Dzięki za odpowiedzi.
Ile pamięci fizycznej ma Twój komputer? – BlueCode
@ BlueCode: To prawdopodobnie nie ma znaczenia; ważna jest pamięć wirtualna; nie cała przydzielona pamięć w przestrzeni adresowej procesu musi być natychmiast zabezpieczona przez pamięć RAM. –
spróbuj umieścić go na stercie zamiast stosu. Jest całkiem prawdopodobne, że maksymalny rozmiar stosu jest ograniczony przez system operacyjny OS lub c. – pm100