use*_*982 3 c c++ memory-management
我需要存储大约10000个变量的布尔信息.首先我想到使用bool数组arr [10000],但需要40000个字节.但我需要以有效的内存方式存储这些信息.也许使用位操作?还需要另外一件事我需要全局存储它并动态分配它.你能帮我解决这个问题吗?
你可以这样做:
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)