例如,我在课堂上听说全局变量只是放在内存中的特定位置。什么是防止两个程序意外地为不同的变量使用相同的内存位置?
另外,两个程序是否使用相同的堆栈作为参数和局部变量?如果是这样,如何防止变量相互交错并弄乱索引?
只是好奇。
例如,我在课堂上听说全局变量只是放在内存中的特定位置。什么是防止两个程序意外地为不同的变量使用相同的内存位置?
另外,两个程序是否使用相同的堆栈作为参数和局部变量?如果是这样,如何防止变量相互交错并弄乱索引?
只是好奇。
这是现代操作系统通过将每个进程加载到单独的虚拟地址空间中来完成的。多个进程可能会引用同一个虚拟地址,但在现代硬件的帮助下,操作系统会将每个进程映射到一个单独的物理地址,并确保一个进程无法访问分配给另一个进程的物理内存1。
您的问题的简短回答是操作系统处理这些问题。它们是非常严重的问题,操作系统工作的很大一部分是将所有内容保存在单独的空间中。操作系统运行的程序跟踪所有其他程序并确保它们每个都使用一个空间。这也使堆栈保持分离。每个程序都在运行由操作系统分配的自己的堆栈。操作系统如何进行这种分配实际上是一项复杂的任务。