Technipion
Erfahrenes Mitglied
Hey Leute,
ich habe folgendes Problem:
Mein Programm nutzt einen Algorithmus (Sieb des Eratosthenes) um Primzahlen zu finden. Ich übergebe per Konsole das obere Limit und es filtert alle Primzahlen bis dahin raus. Hierfür benutze ich ein Array aus <unsigned long long>. Sizeof() verrät, dass sie auf meinem System 8 Byte brauchen. Hier mein Code:
Mein Problem ist jetzt: Für eher "kleine" Limits wie 200.000.000 funktioniert alles prima! Dauert nur wenige Sekunden und liefert korrekte Ergebnisse. Für größere Limits kommt der Error: bad_alloc.
Ich weiß einfach nicht woran's liegt. Ich allokiere dynamisch und der Computer hat mehr als genug RAM!
Bei 210.000.000 als Limit ist Schluss. Ich compiliere es als 32-bit Programm, liegt's vielleicht daran? Sind die Pointer einfach zu klein? Oder gibt Windows 7 nicht mehr her?
Hilfe, wie kriege ich meine 4-6 GB?
Danke schonmal im Voraus
Gruß Technipion
ich habe folgendes Problem:
Mein Programm nutzt einen Algorithmus (Sieb des Eratosthenes) um Primzahlen zu finden. Ich übergebe per Konsole das obere Limit und es filtert alle Primzahlen bis dahin raus. Hierfür benutze ich ein Array aus <unsigned long long>. Sizeof() verrät, dass sie auf meinem System 8 Byte brauchen. Hier mein Code:
Code:
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
if(argc < 2)
{
printf("Limit angeben!\n");
return 0;
}
unsigned long long LIMIT = atoll(argv[1]);
unsigned long long int i, j;
unsigned long long *primes;
try {
primes = new unsigned long long[LIMIT];
}
catch (std::bad_alloc& ba){
std::cerr << "bad_alloc aufgetreten: " << ba.what() << '\n';
}
for (i=2;i<LIMIT;i++)
primes[i]=1;
for (i=2;i<LIMIT;i++)
if (primes[i])
for (j=i;i*j<LIMIT;j++)
primes[i*j]=0;
for (i=2;i<LIMIT;i++)
if (primes[i])
printf("%llu\n",i);
return 0;
}
Mein Problem ist jetzt: Für eher "kleine" Limits wie 200.000.000 funktioniert alles prima! Dauert nur wenige Sekunden und liefert korrekte Ergebnisse. Für größere Limits kommt der Error: bad_alloc.
Ich weiß einfach nicht woran's liegt. Ich allokiere dynamisch und der Computer hat mehr als genug RAM!
Bei 210.000.000 als Limit ist Schluss. Ich compiliere es als 32-bit Programm, liegt's vielleicht daran? Sind die Pointer einfach zu klein? Oder gibt Windows 7 nicht mehr her?
Hilfe, wie kriege ich meine 4-6 GB?
Danke schonmal im Voraus

Gruß Technipion