用于存储字符串文字常量存储池和ROM的字是否相同

时间:2014-02-27 11:35:56

标签: c string string-literals

我正在阅读Head First C书,我读到我们无法更改字符串文字,因为它存储在一个只读内存的常量内存池中。所以朋友是这个恒定的内存池和系统的ROM都是一回事。或者在ROM以外的内存中还有另一个常量的内存池。如果我声明一个字符串它将存储在ROM中,而如果我声明一个int或其他任何东西它将进入RAM?这是真的

3 个答案:

答案 0 :(得分:5)

不,他们肯定不是一回事。

不要求字符串存储在ROM中;如果是这种情况那么你怎么能将程序从硬盘加载到RAM并运行它?由于ROM不可写,因此无法“加载到ROM”。

对于典型的现代PC级计算机,这意味着在加载完成后,将字符串文字加载到只读的RAM的一部分中。

当然,对于嵌入式系统,它 也意味着字符串文字可以有效地放在实际的只读存储器(闪存或真正的ROM)中,因为无法有效地修改数据。这对于嵌入式系统来说很方便,其中“代码空间”(闪存或ROM)的数量通常远大于可用RAM的数量。

总而言之,它是一个相当通用的规范:它只是说从程序的角度来看,字符串文字被认为是不可修改的。它没有说如何实现。文字完全可以修改,即没有任何形式的保护来防止尝试。这并不意味着它突然变得有效,只是实施不是保护你自己。

答案 1 :(得分:1)

它们没有存储在ROM中,实际上它们以只读方式映射到进程空间。另外值得一提的是,它取决于平台之间的差异。

但是如果你想修改你的字符串,那么最好使用一个数组,因为编译器会安排数组从文字中初始化,你可以修改数组。

答案 2 :(得分:1)

NO不是硬件ROM,字符串文字仅存储在RAM中的只读扇区中(在处理空间内),但是在那些可编辑的情况下,一些更简单的芯片架构可能不支持只读段。

注意:阅读有关它的更多信息的过程空间(文本,数据,堆栈)Check Here