【问题标题】:How do programs know if a memory access is allowed?程序如何知道是否允许访问内存?
【发布时间】:2021-12-06 09:21:38
【问题描述】:

维基百科是这样解释“分段错误”的:

当程序尝试访问内存时会发生分段错误 不允许访问的位置,或尝试访问 以不允许的方式存储位置(例如,尝试 写入只读位置,或覆盖部分 操作系统)。

那么,程序执行者在运行时知道程序试图访问的内存是否真的被允许访问的机制是什么?

【问题讨论】:

标签: segmentation-fault memory-access


【解决方案1】:

简短的回答是您的程序使用的地址(以及运行程序的进程使用的地址)不是“真正的”内存地址。相反,在您和由虚拟内存和分页提供的物理内存地址之间存在一个抽象层。

此外,您的程序被分成具有不同目的的“段”,这些段通常位于不同的页面上。例如,为单个函数调用分配的局部变量位于堆栈上,而通过“malloc”获得的内存位于堆上。

【讨论】:

    猜你喜欢
    • 2013-08-12
    • 2014-03-02
    • 2012-04-10
    • 2018-05-21
    • 1970-01-01
    • 1970-01-01
    • 2012-12-04
    • 1970-01-01
    • 2017-10-16
    相关资源
    最近更新 更多