2.8 能否关掉C语言结构中留下的空洞
问题:我的编译器在结构中留下了空洞, 这导致空间浪费而且无法与外部 数据文件进行”二进制” 读写。能否关掉填充, 或者控制结构域的 对齐方式?
这些“空洞” 充当了“填充”, 为了保持结构中后面的域的对齐, 这也许是必须 的。为了高效的访问, 许多处理器喜欢(或要求) 多字节对象(例如, 结构中任何大 于char 的类型) 不能处于随意的内存地址, 而必须是2 或4 或对象大小的倍数。
编译器可能提供一种扩展用于这种控制(可能是#pragma; 参见问题11.21), 但是没有标准的方法。
参见问题20.3。
这些“空洞” 充当了“填充”, 为了保持结构中后面的域的对齐, 这也许是必须 的。为了高效的访问, 许多处理器喜欢(或要求) 多字节对象(例如, 结构中任何大 于char 的类型) 不能处于随意的内存地址, 而必须是2 或4 或对象大小的倍数。
编译器可能提供一种扩展用于这种控制(可能是#pragma; 参见问题11.21), 但是没有标准的方法。
参见问题20.3。