操作系统中的进程有自己的虚拟地址空间。比如说,我在 C 程序中使用 malloc() 函数调用分配一些动态内存,并从它返回的地址中减去一些正值(比如 1000)。现在,我尝试读取该位置上写的内容,这应该没问题,但是写入该位置怎么样?
虚拟地址空间也有一些只读内存块。它如何保护它?
TL;DR不,这是不允许的。
在你的情况下,当你得到一个有效的非空指针,指向由返回的内存地址malloc()
,仅将请求的内存大小分配给您的进程,并且您只能使用(读取和/或写入)该空间。
一般来说,任何分配的内存(编译时或运行时)都有与之关联的大小。任何一个超越 or 运行不足分配的内存区域被认为是无效的内存访问,这会调用未定义的行为 https://en.wikipedia.org/wiki/Undefined_behavior.
就算,记忆is可访问并且在进程地址空间内,没有什么可以阻止操作系统/内存管理器返回指针that特定地址,所以,在best,要么您之前的写入将被覆盖,要么您将覆盖其他一些值。最坏的情况,如前所述,UB。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)