如果我在 c 源代码文件中使用以下两行,数据段和文本段到底会发生什么?
#pragma CODE_SECTION(func1, "Sec1")
#pragma DATA_SECTION(globalvar1, "Sec2")
注意:
#pragma
是特定于编译器的,因此语法可能因编译器而异。
DATA_SECTION 编译指示为称为节名称的节中的符号分配空间。 C 中的编译指示语法可以是:
#pragma DATA_SECTION (symbol, "section name");
C++ 中的编译指示语法可以是:
#pragma DATA_SECTION ("section name");
如果您想要将数据对象链接到与 .bss 部分分开的区域,则 DATA_SECTION 编译指示非常有用。
CODE_SECTION 编译指示在名为“节名称”的节中为 func 分配空间。如果您想要将代码对象链接到与 .text 节分开的区域,则 CODE_SECTION 编译指示非常有用。 C 中的编译指示语法可以是:
#pragma CODE_SECTION (func, "section name")
C++ 中的编译指示语法可以是:
#pragma CODE_SECTION ("section name")
#pragma
表示“这里遵循此编译器特有的实现定义”。所以会发生什么取决于您使用的编译器。如果编译器不支持这个特定的编译指示,整个事情将被忽略。
然而,在这种情况下,这是相当明显的。
#pragma CODE_SECTION(func1, "Sec1")
的意思是:“func1应该在程序存储器中,在称为Sec1的存储器区域中”。 Sec1 将是一个只读内存位置,其中将分配 func1 的实际代码。
#pragma DATA_SECTION(globalvar1, "Sec2")
的意思是:“globalvar1应该在数据内存中,在称为Sec2的内存区域中”。 Sec2 将是分配变量 globalvar1 的读/写位置。