将全局常量数组放入`.rodata`部分

时间:2015-05-28 21:06:48

标签: c gcc static

目标是将大量常量数据放入.rodata部分,并允许从其他翻译单元访问它。据我所知,如果声明为static const,GCC会将数据放入只读部分。但是,在其他文件中将其声明为extern是不可能的。对于非静态数组,我会做类似的事情: data.c将包含:

const int data[] = {0,1,2,....}

data.h将包含:

extern const int data[];

它将允许包含data.h的任何文件“查看”此数据。但是如何做到这一点:

static const int data[] = {0,1,2,....}

当然,我可以使用__attribute __((section("name"))明确定义目标部分,但我更愿意避免使用这种类型的重型火炮。 那么,最便携和最合适的方法是什么?

2 个答案:

答案 0 :(得分:2)

没有可移植的方法将数据放入.rodata部分,因为即使存在这样的部分也依赖于实现。

话虽如此,您可以考虑像这样处理您的问题:

extern const int * const data;

/* ... */

static const int rodata[] = {0,1,2,....};
const int * const data = rodata;

答案 1 :(得分:0)

这个答案:

What is the use of "#pragma section <XYZ>" in C?

讨论了将特定数据项放入其中的常用方法。生成的目标文件中的自己的部分

我在许多编译器中找到了&#39; #pragma部分(&#34; rodata&#34;,&#34; myData&#34;)这种语句。

请注意,并非每个编译器都有此#progma,因此此方法不是完全可移植的。