Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如果整个应用程序都是虚拟映射的,为什么新应用程序会进行系统调用?_C++_Unix_System - Fatal编程技术网

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

C++ 如果整个应用程序都是虚拟映射的,为什么新应用程序会进行系统调用?,c++,unix,system,C++,Unix,System,据我所知,编写一个用户空间应用程序将导致操作系统为此应用程序创建虚拟空间,虚拟空间大约等于系统上的全部ram,这样应用程序会认为它是计算机的所有者,并且部分空间将只映射到物理硬件 因此,我知道新的调用系统调用我认为posix_memalign是为了动态分配内存,所以当它可以从分配的虚拟空间返回内存块而不是调用OS函数时,为什么需要系统调用呢 最后一件事,这个内存是用户空间内存还是属于操作系统我的意思是操作系统分配自己的堆内存,让应用程序使用它这可能是一个愚蠢的问题,但只是因为混淆 据我所知,编写

据我所知,编写一个用户空间应用程序将导致操作系统为此应用程序创建虚拟空间,虚拟空间大约等于系统上的全部ram,这样应用程序会认为它是计算机的所有者,并且部分空间将只映射到物理硬件

因此,我知道新的调用系统调用我认为posix_memalign是为了动态分配内存,所以当它可以从分配的虚拟空间返回内存块而不是调用OS函数时,为什么需要系统调用呢

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

据我所知,编写用户空间应用程序将导致操作系统为此应用程序创建虚拟空间,虚拟空间大约等于系统上的全部ram

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

为什么它需要系统调用

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

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

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

据我所知,编写用户空间应用程序将导致操作系统为此应用程序创建虚拟空间,虚拟空间大约等于系统上的全部ram

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

为什么它需要系统调用

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

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


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

你的第一句话是错误的,所以你问题的整个前提是有缺陷的。操作系统不会为应用程序创建大约等于系统上RAM数量的虚拟空间。它通常分配更少的资源。如果应用程序需要的内存超过了操作系统为其分配的内存,它需要请求内存——为此,它使用系统调用。所有物理和虚拟内存都由操作系统组件管理,并有效地借给应用程序专用。这大概就是为什么现代操作系统可以在程序终止时恢复内存。你的第一句话是错误的,所以你问题的整个前提是有缺陷的。操作系统不会为应用程序创建大约等于系统上RAM数量的虚拟空间。它通常分配更少的资源。如果应用程序需要的内存超过了操作系统为其分配的内存,它需要请求内存——为此,它使用系统调用。所有物理和虚拟内存都由操作系统组件管理,并有效地借给应用程序专用。这大概就是为什么现代操作系统可以在程序终止时恢复内存。好吧,但是有一个简单的hello world和一个新的station仍然会调用这个系统调用,或者不是,我的意思是这个虚拟地址空间还没有被充分利用,对吗?也许,也许不是。它没有指定您第一次调用new时是否需要调用sbrk。当然,这取决于你需要多少内存。好吧,但是有一个简单的hello world和一个新的station仍然会调用这个系统调用,我的意思是这个虚拟地址空间还没有被充分利用,对吧?也许,也许不是。它没有指定您第一次调用new时是否需要调用sbrk。当然,这取决于你需要多少记忆。