C#中大bool数组的问题

Max*_*kov 4 c# arrays primes boolean

我决定写一个素数发生器作为一个简单的例外.代码非常简单:

static void generatePrimes (long min, long max)
    {

        bool[] prime = new bool[max + 1];

        for (long i=2; i<max+1; i++)
            prime [i] = true;

        for (long i=2; i<max+1; i++) {
            if (prime [i]) {
                if (i>=min)
                    Console.WriteLine (i);
                for (long j=i*2; j<max+1; j+=i)
                    prime [j] = false;
            }
        }

        Console.WriteLine ();

    }
Run Code Online (Sandbox Code Playgroud)

输入就像1..10000一样好用.但是,在max = 1000000000左右,它开始工作得非常慢; 此外,mono需要大约1Gb的内存.对我来说,这似乎有点奇怪:bool [1000000000]不应该占用1000000000位,而不是字节?也许我犯了一些愚蠢的错误,我不认为这会让它变得如此无效?

Ken*_*rey 8

计算机可以处理的最小信息单位是一个字节.因此a bool存储为字节.您将需要特殊代码将8个bool放在一个字节中.这BitArray堂课为你做这件事.

  • 计算机可以"寻址"的最小信息单位是字节,而不是"存储". (5认同)
  • @Blindy:实际上,它就在sizeof页面上.sizeof(bool)= 1个字节.http://msdn.microsoft.com/en-us/library/eahchzkf(v=vs.80).aspx (2认同)