Pin*_*_be 6 c++ size class uint64
我将以下代码作为示例.
#include <iostream>
struct class1
{
uint8_t a;
uint8_t b;
uint16_t c;
uint32_t d;
uint32_t e;
uint32_t f;
uint32_t g;
};
struct class2
{
uint8_t a;
uint8_t b;
uint16_t c;
uint32_t d;
uint32_t e;
uint64_t f;
};
int main(){
std::cout << sizeof(class1) << std::endl;
std::cout << sizeof(class2) << std::endl;
std::cout << sizeof(uint64_t) << std::endl;
std::cout << sizeof(uint32_t) << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
版画
20
24
8
4
Run Code Online (Sandbox Code Playgroud)
所以很容易看出一个uint64_t和两个uint32_t一样大,为什么类2有4个额外的字节,如果它们是相同的,除了替换两个uint32_t用于uint64_t.
正如所指出的,这是由于填充.
为防止这种情况,您可以使用
#pragma pack(1)
class ... {
};
#pragma pack(pop)
Run Code Online (Sandbox Code Playgroud)
它告诉编译器不要对齐8个字节,而是对齐一个字节.pop命令将其关闭(这非常重要,因为如果你在标题中执行此操作并且有人包含您的标题,则可能会发生非常奇怪的错误)