加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 进程是否可以从其虚拟内存中的任何地址读/写?

发布时间:2020-12-16 10:13:14 所属栏目:百科 来源:网络整理
导读:OS中的进程有自己的虚拟地址空间.比如,我在c程序中使用malloc()函数调用分配一些动态内存,并从它返回的地址中减去一些正值(比如1000).现在,我尝试阅读该位置上写的内容应该没问题但是写到该位置呢? 虚拟地址空间也有一些只读的内存块.它是如何保护的? 解决
OS中的进程有自己的虚拟地址空间.比如,我在c程序中使用malloc()函数调用分配一些动态内存,并从它返回的地址中减去一些正值(比如1000).现在,我尝试阅读该位置上写的内容应该没问题但是写到该位置呢?

虚拟地址空间也有一些只读的内存块.它是如何保护的?

解决方法

TL; DR不,这是不允许的.

在您的情况下,当您获得一个有效的非NULL指针指向malloc()返回的内存地址时,只有所请求的内存大小被分配给您的进程,并且您被允许使用(读取和/或写入)只有很多空间.

通常,任何分配的内存(编译时或运行时)都与其关联.过度运行或欠载分配的内存区域被视为无效内存访问,它将调用undefined behavior.

即使内存是可访问的并且在进程地址空间内,也没有什么能阻止操作系统/内存管理器将指针返回到该特定地址,因此,最好是先前的写入将被覆盖,或者您将覆盖其他内容值.最糟糕的情况,如前所述,UB.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读