目标是将大量常量数据放入.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"))
明确定义目标部分,但我更愿意避免使用这种类型的重型火炮。
那么,最便携和最合适的方法是什么?
答案 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,因此此方法不是完全可移植的。