当前位置:嗨网首页>书籍在线阅读

13-对结构体进行紧凑存储(pack)

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

对结构体进行紧凑存储(pack)

packed属性告诉编译器一个类型或变量应该在内存中进行紧凑存储,使用尽可能少的空间,可能不依赖对齐需求。如果在结构体(struct)或联合体(union)上指定该属性,就需要对所有变量进行紧凑存储。如果只是对某个变量指定该属性,就只会紧凑存储该特定对象。

以下使用方式会对结构体中的所有变量进行紧凑存储,尽可能占用最小的空间:

598.png 在这个例子中,如果一个结构体包含一个char类型,紧跟着的是一个int类型,很可能会发现该整数会遵循内存地址对齐,其地址不会紧接着char的地址,中间会隔着三个字节。编译器会通过插入一些未使用的字节来填充,从而使得变量符合内存地址对齐。而对于紧凑存储格式,结构体中不会有未使用的字节填充,这样很可能消耗的内存少,但是不满足计算机体系结构的对齐要求。