生成.data节时如何让gcc忽略填充?

时间:2016-12-06 09:29:33

标签: c gcc

以下代码:

mvn package

检查#include <stdint.h> uint8_t byte = 0x12; uint16_t word = 0x1234; int main(int argc, char *argv[]) { return 0; } 部分,它显示.data变量2个字节,而不是byte承诺:

uint8_t

我们如何确保Hex dump of section '.data': 0x00601020 00000000 00000000 00000000 00000000 ................ 0x00601030 12003412 ..4. 为1个字节,即使它使内存不对齐?我尝试添加byte,但它仍然是相同的。

1 个答案:

答案 0 :(得分:1)

  

字节变量2个字节,而不是uint8_t承诺的1个

变量为1但编译器将其填充为2个字节。请注意,这不会影响总截面大小(它仍将与2个字节对​​齐)。

  

我们如何确保字节为1个字节,即使它使内存未对齐?

你为什么要那样做?在许多平台上,这将导致编译器为内存访问生成低效的代码,因此,由于代码大小的增加,您将从可变对齐中挤出任何内容。如果您绝对必须使用未对齐的全局变量,请使用__attribute__((aligned(1)))标记它们。