我遇到了内存管理问题。由于我在常量大小的字节缓冲区中工作,我需要尽可能紧凑的数据。
我需要检查其中包含另一个结构的结构的大小。这是代码:
struct CommonData
{
//common data
uint64_t a; // 8B
uint64_t b; // 8B
uint64_t c; // 8B
uint32_t d; // 4B
uint8_t e; // 1B
uint8_t f; // 1B
};
struct AllData
{
//specific data
uint8_t arr[15]; //15B
//common data
CommonData commonData; //30B
}
通常我认为sizeOf(AllData)将是30 + 15 = 45 B,但是编译器说它是48.是的,我对内存填充有所了解,是的,我知道这是“问题”。 有没有办法我可以重新排列我的数据,以摆脱那些填充3字节,因为内存在这里非常重要。
注意:__ attribute __((打包))没有做到这一点
编辑:
两个结构上的pragma pack(push,1)
.... ....
pragma pack(pop)
都有效,但我不确定这个选项是多么安全可靠
提前谢谢!