RAMの26ビット変数の大きな配列で作業する必要があります。 32ビットintを使用するには高価です。アクセスは可能な限り速くなければなりません(特に読み取り操作)。
私は以下のスキームに着きました。各26ビットの値は、3つの8ビット値と2ビットに分割されます。26ビットの符号なし整数の大きな配列
#define N 500000000
uint8 arr1[N], arr2[N], arr3[N];
uint8 arr4[N/4];
int read_value(int index)
{
int a1 = arr1[index]; // bits 0..7
int a2 = arr2[index]; // bits 8..15
int a3 = arr3[index]; // bits 16..23
int a4 = (arr4[index/4] >> (2 * (index % 4))) & 3; // bits 24..25
return a1 | (a2 << 8) | (a3 << 16) | (a4 << 24);
}
これを行うにはいくつかの方法がありますか? 27/28/29/30ビットの整数で作業するのにいい方法がありますか?
はい、私はスペースワイズを意味しました。差は約400 MBです。 – stannic