使用动态分配为大约10000个变量存储布尔信息的内存有效方法

use*_*982 3 c c++ memory-management

我需要存储大约10000个变量的布尔信息.首先我想到使用bool数组arr [10000],但需要40000个字节.但我需要以有效的内存方式存储这些信息.也许使用位操作?还需要另外一件事我需要全局存储它并动态分配它.你能帮我解决这个问题吗?

Cra*_*sta 6

你可以这样做:

vals = new char[(len+7)/8];
// To access
vals[i/8] & 1 << (i % 8)
// To set
vals[i/8] |= 1 << (i % 8);
// To clear
vals[i/8] &= ~(char)(1 << (i % 8));
Run Code Online (Sandbox Code Playgroud)

虽然是最快的,但你应该使用任何字大小的块.所以在32位计算机上:

vals = new uint32_t[(len+31)/32];
// To access
vals[i/32] & 1 << (i % 32)
// To set
vals[i/32] |= 1 << (i % 32);
// To clear
vals[i/32] &= ~(uint32_t)(1 << (i % 32));
Run Code Online (Sandbox Code Playgroud)

  • B OP 询问*内存效率*,并且使用 64 位块 4000 不会是最高效的内存;-) (2认同)