On Tue, 29 Apr 2008 20:37:12 -0400, "Edward Ruggeri" <[EMAIL PROTECTED]> wrote: > I have recently been writing an implementation of the sieve of > Eratosthenes in C. To find all primes less than N, I dynamically > create an array of chars (relatively small datatype) of length N+1 (I > know I don't need to represent evens). > > Everything works great up until around 600 million, at which case > memory allocation fails. At this point, I am asking for 600M chars, > which is about 572MB (I might be failing to take account of offset?).
You are hitting the limit set as kern.maxdsiz (512 MB by default). One possible 'optimization', which can bump the total count of numbers you can represent in your sieve (at a small cost of extra complexity) is to use a single *bit* for each number, and the macros from FreeBSD's <bitstring.h>. By using a bit-map for the numbers, you can represent eight times as many numbers in a sieve of the same size. Another option is to bump the value of kern.maxdsiz at boot time. This has been described many many times in the list archives, so a Google search should quickly yield several hits. > I am using FreeBSD 6.3-prerelease, with SMP for a Athlon X2 4200+ (if > it makes a difference). Sorry if this is a RTFM question ... That's fine. A question never asked is much worse than a question which causes people to learn even more about FreeBSD :) _______________________________________________ email@example.com mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-questions To unsubscribe, send any mail to "[EMAIL PROTECTED]"