给定以下全局(或静态局部)变量的定义:
static const <type>* const ptr = {&var1, &var2, ...};
,我可以相信初始化器列表中的ptr和data都将被放置到生成的对象文件的单独只读部分(即,它不会被放置到.data或包含非常量变量的类似部分)吗?
问题仅与所有体系结构/平台(至少是那些存在只读内存的体系结构或平台)常见的gcc c/c++编译器行为有关。它并不意味着任何平台、处理器、操作系统、链接器、启动运行时、库等。
请不要问我要做什么。我知道我在做什么。如果我提供的信息不足以回答问题,那么问题必须被视为xxx特定问题,一般回答为"否"。我已经读过这个问题的答案,其中提到这个主题非常接近:
类型限定符对存储位置的影响
只读内存是如何在C中实现的
是否"const";只是指只读还是其他什么
为什么编译器允许您"写";这里的常量变量
GCC C++(ARM)和指向结构字段的常量指针
memcpy,带有指向常量数据的目标指针
但我并没有找到确定和直接的答案。
根据stackerflow线程,C中存储的常量变量在哪里?它是特定于实现的。就我个人而言,我甚至不会认为海湾合作委员会的所有港口都是以同样的方式实施的。这就是为什么AVR端口引入了"progmem"属性的原因。
所以根据你的
不要问我在做什么,如果没有足够的信息,答案是"没有">
态度,我想在这里说:答案是"不",没有可移植的方法来保证这样的事情。事实上,即使您指示编译器和链接器将其放置在类似"只读部分"的地方。如果此部分位于RAM中,谁将阻止对此部分的写访问?