Chr*_*mer 3 c c++ memory-management alignment
对于Connect Four游戏的转置表(通常是哈希表),我想有效地使用内存(以存储尽可能多的元素).一个表元素必须存储以下信息:
首先,我尝试了以下数据结构,需要24个字节:
struct TableEntry1
{
unsigned __int64 lock;
unsigned char move;
short score;
enum { VALID, UBOUND, LBOUND } flag;
char height;
};
Run Code Online (Sandbox Code Playgroud)
重新排列元素后,它需要16个字节(我找到了这个行为的答案):
struct TableEntry2
{
unsigned __int64 lock;
enum { VALID, UBOUND, LBOUND } flag;
short score;
char height;
unsigned char move;
};
Run Code Online (Sandbox Code Playgroud)
我的最后一次尝试是:
struct TableEntry3
{
unsigned __int64 lock;
unsigned int move:3;
int score:12;
enum { VALID, UBOUND, LBOUND } flag:2;
int height:7;
};
Run Code Online (Sandbox Code Playgroud)
其中还需要16个字节.是否可以更改结构,使其仅使用12字节(在32位架构上)?为什么编译器不能让我最后一次尝试12个字节长?
谢谢!
编辑该属性lock是检测哈希冲突的唯一元素ID.