Gcc:匿名字符串的内存区域

时间:2011-08-10 11:14:58

标签: c gcc memory-management compilation

我使用GCC并需要定义大量文本,例如

const char* myArray[1000] = {"red", "blue", "green", "yellow", ...};

我有一个指针数组和大堆文本,如"red\0blue\0green\0..."一些内存。我想更改该文本的内存区域。我使用了__attribute__((section(...))) GCC指令,但它们只改变了指针的分配。如何更改大文本块的分配?谢谢你的回答。

P.S。抱歉英语不好。

1 个答案:

答案 0 :(得分:2)

您可以将-fdata-sections与gcc一起使用。这将为对象文件中的每个全局变量创建一个唯一的部分。

然后,您可以创建一个LdScript文件,该文件将告诉链接器(ld)将这些部分放入所需的内存区域。

匿名字符串位于object-file的.rodata-section中。 LdScript示例代码段:

.memregion1.rodata :
{ 
    Startup.c.obj(.rodata.str1.8)
}

将把startup.c中的str1.8放入memregion1。