Wiem, ze stary watek, ale moze komus sie przyda taka wiedza.
Niektore systemy operacyjne (przykladowo linux) zarządzają pamięcią w bardzo specyficzny sposób, tzn, zaalokowanie pamięci nie powoduje automatycznego zarezerwowania obszaru pamięci dla programu. Dopiero, gdy program skorzysta z tej pamięci, system go zarezerwuje.
Przykład w “C”:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/* app <rozmiar_do_zaalokowania> <rozmiar_do_uzycia> */
int main(int argc, char * argv []) {
if (argc > 2) {
char * array = (char *)malloc(atoi(argv[1]));
int size = atoi(argv[2]);
memset(array, 'x', size);
printf("adres konca uzytego obszaru: %p\n", (void *)(array + size));
}
return EXIT_SUCCESS;
}
Wywolanie i uzycie pamieci (w kazdym tescie alokuje ok 2GB):
./app 2000000000 100
uzycie: 1.42M
./app 2000000000 1000000
uzycie: 2.45M
./app 2000000000 10000000
uzycie: 11.04
./app 2000000000 100000000
uzycie: 96.87M
./app 2000000000 1000000000
u mnie system crash, za malo zasobow
Pzdr.