3 次元の char 配列を使用してブルーム フィルター (ビット テーブル) を実装しましたが、メモリを割り当てることができなくなり、 bad_allocメッセージが表示されるまではうまく機能します。600MB を割り当てた後、次の拡張リクエストでこのエラーが発生します。
ブルーム フィルター (配列) は、8 ~ 10 GB の大きさになると予想されます。
ビットテーブルを割り当てる(展開する)ために使用したコードは次のとおりです。
unsigned char ***bit_table_=0;
unsigned int ROWS_old=5;
unsigned int EXPND_SIZE=5;
void expand_bit_table()
     {
         FILE *temp;
         temp=fopen("chunk_temp","w+b");
         //copy old content
         for(int i=0;i<ROWS_old;++i)
             for(int j=0;j<ROWS;++j)
                 fwrite(bit_table_[i][j],COLUMNS,1,temp);
         fclose(temp);
         //delete old table
         chunk_delete_bit_table();
         //create expanded bit table ==> add EXP_SIZE more rows
         bit_table_=new unsigned char**[ROWS_old+EXPND_SIZE];
         for(int i=0;i<ROWS_old+EXPND_SIZE;++i)
            {
                bit_table_[i]=new unsigned char*[ROWS];
                for(int k=0;k<ROWS;++k)
                    bit_table_[i][k]=new unsigned char[COLUMNS];
            }
         //copy back old content
          temp=fopen("chunk_temp","r+b");
         for(int i=0;i<ROWS_old;++i)
         {
            fread(bit_table_[i],COLUMNS*ROWS,1,temp);
         }
          fclose(temp);
         //set remaining content of bit_table_to 0
         for(int i=ROWS_old;i<ROWS_old+EXPND_SIZE;++i)
             for(int j=0;j<ROWS;++j)
                 for(int k=0;k<COLUMNS;++k)
                     bit_table_[i][j][k]=0;
         ROWS_old+=EXPND_SIZE;
     }
配列の最大許容サイズはいくらですか。これが問題でない場合は、どうすればよいですか。
編集: 32 ビット プラットフォームを使用して開発されています。
8 GB RAM を搭載した 64 ビット プラットフォーム (サーバー) で実行されます。