【发布时间】:2016-06-07 19:29:30
【问题描述】:
我认为我的问题很简单,但我找不到答案。 基于我对虚拟内存的理解:
每个进程都会收到一个连续的地址空间,该地址空间映射到 物理内存。
所以,我在我的程序中编写的代码应该能够访问给它的虚拟内存中的任何位置,所以我在 C 中编写了以下代码,它抛出了“访问冲突异常”类型的异常。
如果有人向我解释原因,我将不胜感激。
代码如下:
int* a = 1; // pointer to 1st block of memory
*a = 5; // set the content of pointer to 5, but throws exception
【问题讨论】:
-
你不能写入你不拥有的内存。一部分地址空间被保留(未映射)
-
谁说你所有的记忆都是可写的?另外,为什么你认为它保持连续?
-
every process receives a contiguous address space which is mapped to physical memory这是操作系统问题,取决于其内存处理。following code in C which throws an exception这是C代码问题。C标准不了解您可能想到的特定操作系统,也无法解决该部分。就C标准而言,您没有以某些C标准方式(例如malloc,或定义变量)获得的内存在实际用途中不存在,并导致UB(未定义行为)如果访问。
标签: c operating-system virtual-memory