end*_*ade 1 c c++ integer packing
我有下面的整数结构(32位环境):
struct rgb {
int r;
int g;
int b;
};
Run Code Online (Sandbox Code Playgroud)
我是否正确地说,由于rgb组件值(0-255)仅需要表示8位(1字节),我只使用1字节的内存并为每个组件留下3个字节?
另外,如果我改为做了以下事情:
struct rgb{
unsigned int r:8;
unsigned int g:8;
unsigned int b:8;
};
Run Code Online (Sandbox Code Playgroud)
假设我上面说的是正确的,那么使用这个新结构会将未使用的字节数减少到1吗?
我会用unsigned char
,这正是你需要的.喜欢
#ifndef BYTE
#define BYTE unsigned char
#endif
struct rgb
{
BYTE r;
BYTE g;
BYTE b;
};
Run Code Online (Sandbox Code Playgroud)
但是要回答你的问题 - 是的,它确实将每个字段的字节数减少到1.
无论如何,由于@ JimBuck的评论,结构可能大小为4B,因为对齐(但这些是细节并且它完全是平台特定的)被删除了