C++中定义一个空结构体的内存占用
比如定义:
struct Test {};
使用sizeof(Test)可以查看到内存占用并不是0,而是1字节。
原因主要有两点:
一是用于对象标识:在C++中,每个对象都需要有一个唯一的地址。如果空类或结构体的大小为0字节,那么创建两个这样的对象时,它们在内存中的地址将是相同的,这与C++的对象模型相冲突。为了确保每个对象都有一个唯一的地址,编译器会至少给空类或结构体分配1字节的空间。
二是内存对齐:许多处理器在访问内存时都有对齐的要求,这意味着数据的起始地址需要是某个特定数值(如4或8)的倍数。如果类或结构体的大小为0,那么它无法满足这些对齐要求。通过至少分配1字节,编译器可以确保对象在内存中的布局满足处理器的对齐约束。
それでも私の大好きな人