3

给定以下全局(或静态局部)变量的定义:

static const <type>* const ptr = {&var1, &var2, ...};

,我可以依赖这样一个事实,即初始化列表中的ptrdata都将被放置到生成的目标文件的单独只读部分(即它不会被放置到 .data 或包含非常量变量的类似部分)?

问题仅与所有架构/平台(至少其中存在只读内存的那些)共有的gcc c/c++ 编译器行为有关。它并不意味着任何平台、处理器、操作系统、链接器、启动运行时、库等。

请不要问我要做什么。我知道我在做什么。如果我提供的信息不足以回答,则必须将问题视为特定于 xxx 的问题,通用答案为“否”。我已经阅读了非常接近地提到这个主题的问答:

类型限定符对存储位置的影响
C 中如何实现只读内存?
“const”只是意味着只读还是更多?
为什么编译器允许你在这里“写”一个 const 变量?
GCC C++ (ARM) 和指向结构字段
memcpy 的 const 指针以及指向 const 数据的目标指针

但我没有找到确定和直接的答案。

4

1 回答 1

2

根据stackoverflow线程,常量变量存储在C哪里?它是特定于实现的。就个人而言,我什至不会相信所有 GCC 端口都以相同的方式实现。这就是例如 AVR 端口引入“程序”属性的原因。

所以根据你的

不要问我在做什么,如果没有足够的信息,答案是“没有”

态度,我会在这里说:答案是“不”,没有可移植的方式来保证这样的事情。事实上,即使您指示编译器和链接器将其放置在“只读部分”之类的东西中。如果此部分位于 RAM 中,谁将阻止对该部分的写访问?

于 2012-12-05T08:07:50.033 回答