是否可以通过c / c ++中的gcc编译器将const数据的全局const指针保存在单独的只读部分中?

时间:2012-11-18 18:30:05

标签: c memory gcc const storage-class-specifier

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

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

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

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

拜托,不要问我要做什么。我知道我在做什么。如果我提供的信息不足以回答,那么问题必须被视为特定于xxx且通用答案为“否”。我已经阅读过这个问题非常接近的问题 - 答案:

Impact of the type qualifiers on storage locations
How is read-only memory implemented in C?
Does "const" just mean read-only or something more?
Why does compiler allow you to "write" a const variable here?
GCC C++ (ARM) and const pointer to struct field
memcpy with destination pointer to const data

但我没有找到有保证的直接答案。

1 个答案:

答案 0 :(得分:2)

根据stackoverflow线程Where are constant variables stored in C?它是特定于实现的。而且我个人甚至不会依赖所有GCC端口以相同方式实现的想法。这就是为什么例如AVR端口引入了“progmem”属性。

所以根据你的

  

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

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