首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >只读内存和堆内存

只读内存和堆内存
EN

Stack Overflow用户
提问于 2010-06-10 14:26:44
回答 4查看 2.4K关注 0票数 3

在使用C语言的情况下,字符串文字存储在只读存储器中。这实际上出现在硬件上的什么地方。

如果我错了,我的知识堆就在RAM.correct上。

堆与只读内存有什么不同?

它依赖于操作系统吗?

EN

回答 4

Stack Overflow用户

发布于 2010-06-10 14:33:01

这通常是在硬件辅助下完成的。

可以告知硬件的虚拟存储器子系统将页面标记为只读。当应用程序尝试写入只读页时,硬件会生成操作系统捕获的错误。操作系统可以告诉你应用程序试图写一个只读页面并结束你的程序。

因此,OS/loader确保字符串文本所在的页面被标记为只读。

堆和只读内存是正交问题。

票数 3
EN

Stack Overflow用户

发布于 2010-06-10 16:03:38

它依赖于操作系统和硬件。规范说它们可以放在只读存储器中,而不是必须放在只读存储器中。如果你正在为一个简单的嵌入式设备编写C语言,那么字符串就会进入rom,而运行时内存是从内存中分配的;它们在物理上是分开的(Harvard)。如果它是一台典型的类unix计算机,那么有一个虚拟内存子系统,它可以将逻辑地址转换为页中的物理地址,并可以将一些页标记为只读和一些可执行,但内存本身可以是数据或指令(Von Neumann)。

票数 1
EN

Stack Overflow用户

发布于 2010-06-10 14:32:58

通常是设置了写保护的普通进程虚拟内存。

这取决于实现,但处理器通常使用特殊的元数据块来控制对内存区域的访问,操作系统可以相应地设置这些元数据块。因此,字符串、文字和所有其他不可更改的内容被加载到一个设置了保护的区域中。因此,当程序试图修改内存时,处理器内部的一个特殊单元会检查是否允许该写操作,如果不允许,则会发出一个硬件中断,由操作系统处理。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3012113

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档