【问题标题】:Gcc: Memory region for anonymous stringGcc:匿名字符串的内存区域
【发布时间】:2011-08-10 11:14:57
【问题描述】:

我使用了 GCC,需要定义大量的文本,比如

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

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

附:抱歉英语不好。

【问题讨论】:

  • 您能否提供一些为什么您想这样做的想法?这可能有助于弄清楚如何完成您所需要的,但我怀疑这不是一个好主意......

标签: c gcc memory-management compilation


【解决方案1】:

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

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

匿名字符串位于目标文件的 .rodata 部分。一个 LdScript 示例 sn-p:

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

会将 Startup.c 中的 str1.8 放入 memregion1。

【讨论】:

  • 这个或(相当丑陋的)解决方案:const char red[] __attribute__((section("mytext"))) = "red"; const char blue[] __attribute__((section("mytext"))) = "blue"; const char* myArray[] = { red, blue, ... };
猜你喜欢
  • 2019-03-24
  • 1970-01-01
  • 2015-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多