如果整个应用程序实际上已映射,为什么 new 会进行系统调用?

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

我的理解是,编写用户 space 应用程序将导致 OS 为此应用程序创建虚拟 space,这将大约 = 系统上的全部 ram,这样应用程序就会认为它是计算机的所有者,其中一些 space 只会映射到物理硬件。

因此,我知道我认为新的调用系统调用 posix_memalign 可以动态分配内存,所以当它可以 return 来自分配的虚拟 [=] 的内存块时,为什么它需要系统调用22=] 相反,它调用 OS 函数来执行此操作。

最后,这个内存是用户space内存还是属于OS(我的意思是OS分配自己的堆内存,让应用程序使用它)这可能是一个愚蠢的问题,但只是因为混淆。

what i understand is that writing a user space app will result in OS creating virtual space for this app which will be approx = whole amount of ram on the system

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

why does it need system calls

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

Is this memory is a user space memory or it belong to the OS

虚拟内存是用户space和内核都知道的东西。我不知道“属于”在这种情况下是什么意思。