C中使用32位整数的未使用内存

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吗?

Kir*_*rov 5

我会用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,因为对齐(但这些是细节并且它完全是平台特定的)被删除了

  • @Kiril - 差不多,虽然结构只有3个字节,但下一个对象将在32位上对齐,所以它确实使用了4个字节 (3认同)