在使用C语言的情况下,字符串文字存储在只读存储器中。这实际上出现在硬件上的什么地方。
如果我错了,我的知识堆就在RAM.correct上。
堆与只读内存有什么不同?
它依赖于操作系统吗?
发布于 2010-06-10 14:33:01
这通常是在硬件辅助下完成的。
可以告知硬件的虚拟存储器子系统将页面标记为只读。当应用程序尝试写入只读页时,硬件会生成操作系统捕获的错误。操作系统可以告诉你应用程序试图写一个只读页面并结束你的程序。
因此,OS/loader确保字符串文本所在的页面被标记为只读。
堆和只读内存是正交问题。
发布于 2010-06-10 16:03:38
它依赖于操作系统和硬件。规范说它们可以放在只读存储器中,而不是必须放在只读存储器中。如果你正在为一个简单的嵌入式设备编写C语言,那么字符串就会进入rom,而运行时内存是从内存中分配的;它们在物理上是分开的(Harvard)。如果它是一台典型的类unix计算机,那么有一个虚拟内存子系统,它可以将逻辑地址转换为页中的物理地址,并可以将一些页标记为只读和一些可执行,但内存本身可以是数据或指令(Von Neumann)。
发布于 2010-06-10 14:32:58
通常是设置了写保护的普通进程虚拟内存。
这取决于实现,但处理器通常使用特殊的元数据块来控制对内存区域的访问,操作系统可以相应地设置这些元数据块。因此,字符串、文字和所有其他不可更改的内容被加载到一个设置了保护的区域中。因此,当程序试图修改内存时,处理器内部的一个特殊单元会检查是否允许该写操作,如果不允许,则会发出一个硬件中断,由操作系统处理。
https://stackoverflow.com/questions/3012113
复制相似问题