这不坑我么.内存占用直接多出一倍.
探索
通过查找资料, 发现了这样一个名词: 内存对齐. 什么是内存对齐呢?...而GO编译器在编译的时候, 为了保证内存对齐, 对每一个数据类型都给出了对齐保证, 将未对齐的内存留空. 如果一个类型的对齐保证是4B, 那么其数据存放的起始地址偏移量必是4B 的整数倍....结构体的对齐保证, 为其成员变量对齐保证的最大值.
why
那么编译器为什么要做内存对齐这种事情呢?...这样的话, 当你需要读取i3变量的时候, 需要进行两次内存访问. 而对齐之后, 只需要进行一次内存访问即可. 是典型的空间换时间的做法....image-20201120233416532
通过之前的对齐分析. 结果确为18B. 也就是因为字段顺序的问题, 编译器为了保证内存对齐, 向其中填充了很多空白, 造成了内存的浪费.