Gcc 什么是;aw";节属性中的标志意味着什么?

Gcc 什么是;aw";节属性中的标志意味着什么?,gcc,attributes,linker,Gcc,Attributes,Linker,在下面的代码行中(声明了一个全局变量) “aw”标志是什么意思 我的理解是nobits标志将阻止变量初始化为零,但我正在努力查找有关“aw”标志的信息 还有,nobits旗周围的@和#是什么意思 “aw”标志是什么意思 这意味着该部分是可分配的(即在运行时加载到内存中)和可写的(当然也是可读的) 我的理解是nobits标志将阻止变量初始化为零,但我正在努力查找有关“aw”标志的信息 还有,nobits旗周围的@和#是什么意思 @nobits(@只是名称的一部分)表示该节不存储在磁盘上的映像中,它

在下面的代码行中(声明了一个全局变量)

“aw”标志是什么意思

我的理解是nobits标志将阻止变量初始化为零,但我正在努力查找有关“aw”标志的信息

还有,nobits旗周围的@和#是什么意思

“aw”标志是什么意思

这意味着该部分是可分配的(即在运行时加载到内存中)和可写的(当然也是可读的)

我的理解是nobits标志将阻止变量初始化为零,但我正在努力查找有关“aw”标志的信息

还有,nobits旗周围的@和#是什么意思

@nobits(@只是名称的一部分)表示该节不存储在磁盘上的映像中,它只存在于运行时(在启动时用零填充)

#字符开始注释,因此编译器将在您指定的内容之外添加的任何内容都将被忽略。

该属性通过生成以下汇编器行在特定节中放置变量:

.section    section-name,"aw",@progbits
当您将
节名设置为
“.myVarSection、\“aw\”、@nobits\”
时,您可以利用GCC中的一种“”来生成:

.section    .myVarSection,"aw",@nobits#,"aw",@progbits
请注意,
#
符号开始一行注释

有关
指令的完整说明,请参阅。一般语法是

.section name [, "flags"[, @type[,flag_specific_arguments]]]
因此,
“aw”
是标志:

  • a:节是可分配的
  • w:节是可写的
@nobits
是一种类型:

  • @nobits:节不包含数据(即节仅占用空间)

以上所有内容不仅适用于变量。

那么如何防止变量在启动时被初始化为零?如果使用@progbits而不是@nobits,它在启动时不会被初始化为零,但会存储在磁盘上的映像中(如果不指定另一个值,它仍然为零)。你想实现什么?我想在引导加载程序和嵌入式微控制器上的应用程序之间传递一个标志(在RAM中)。我发现在链接器文件中添加一个节会阻止变量的初始化。在哪里可以找到预处理的文件?我想知道有什么被评论掉了。
.section name [, "flags"[, @type[,flag_specific_arguments]]]