pragma代码段和数据段有什么用?

问题描述 投票:0回答:2

如果我在 c 源代码文件中使用以下两行,数据段和文本段到底会发生什么?

#pragma CODE_SECTION(func1, "Sec1")
#pragma DATA_SECTION(globalvar1, "Sec2")
c c-preprocessor pragma
2个回答
8
投票

来源(包含示例):https://web.archive.org/web/20080803190119/http://hi.baidu.com/jevidyang/blog/item/6d4dc436d87e3a300b55a918.html

注意:

#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")

3
投票

#pragma
表示“这里遵循此编译器特有的实现定义”。所以会发生什么取决于您使用的编译器。如果编译器不支持这个特定的编译指示,整个事情将被忽略。


然而,在这种情况下,这是相当明显的。

#pragma CODE_SECTION(func1, "Sec1")
的意思是:“func1应该在程序存储器中,在称为Sec1的存储器区域中”。 Sec1 将是一个只读内存位置,其中将分配 func1 的实际代码。

#pragma DATA_SECTION(globalvar1, "Sec2")
的意思是:“globalvar1应该在数据内存中,在称为Sec2的内存区域中”。 Sec2 将是分配变量 globalvar1 的读/写位置。

© www.soinside.com 2019 - 2024. All rights reserved.