如果整个应用程序是虚拟映射的,为什么 new 会进行系统调用?

Why does new make system calls if whole app is virtually maped?

本文关键字:new 为什么 系统调用 应用程序 映射 虚拟 如果      更新时间:2023-10-16

我的理解是,编写用户空间应用程序将导致操作系统为此应用程序创建虚拟空间,该空间约为 = 系统上的 RAM 总量,这样应用程序会认为它是计算机的所有者,其中一些空间将仅映射到物理硬件。

因此,我知道我认为新的调用系统调用posix_memalign动态分配内存,那么当它可以从分配的虚拟空间返回内存块而不是调用操作系统函数来执行此操作时,为什么它需要系统调用。

最后一件事,这个内存是用户空间内存还是属于操作系统(我的意思是操作系统分配自己的堆内存,只是让应用程序使用它(这可能是一个愚蠢的问题,但只是因为混乱。

我的理解是,编写用户空间应用程序将导致操作系统为该应用程序创建虚拟空间,大约=系统上的RAM总量

不。 典型的主流操作系统将创建虚拟内存来保存程序本身及其请求的内存,因为它请求更多。 虚拟内存量和物理内存量之间没有关系,就像街道上的最大地址号和该街上的房屋数量之间存在关系一样。

为什么需要系统调用

增加进程中的虚拟内存量通常由sbrk()mmap()完成。 这会导致系统调用,因为它们需要更新内核数据结构以"映射"更多虚拟内存地址。

此内存是用户空间内存还是属于操作系统

虚拟内存是用户空间和内核都知道的东西。 我不知道在这种情况下"归属"是什么意思。