如果整个应用程序是虚拟映射的,为什么 new 会进行系统调用?
Why does new make system calls if whole app is virtually maped?
我的理解是,编写用户空间应用程序将导致操作系统为此应用程序创建虚拟空间,该空间约为 = 系统上的 RAM 总量,这样应用程序会认为它是计算机的所有者,其中一些空间将仅映射到物理硬件。
因此,我知道我认为新的调用系统调用posix_memalign动态分配内存,那么当它可以从分配的虚拟空间返回内存块而不是调用操作系统函数来执行此操作时,为什么它需要系统调用。
最后一件事,这个内存是用户空间内存还是属于操作系统(我的意思是操作系统分配自己的堆内存,只是让应用程序使用它(这可能是一个愚蠢的问题,但只是因为混乱。
我的理解是,编写用户空间应用程序将导致操作系统为该应用程序创建虚拟空间,大约=系统上的RAM总量
不。 典型的主流操作系统将创建虚拟内存来保存程序本身及其请求的内存,因为它请求更多。 虚拟内存量和物理内存量之间没有关系,就像街道上的最大地址号和该街上的房屋数量之间存在关系一样。
为什么需要系统调用
增加进程中的虚拟内存量通常由sbrk()
或mmap()
完成。 这会导致系统调用,因为它们需要更新内核数据结构以"映射"更多虚拟内存地址。
此内存是用户空间内存还是属于操作系统
虚拟内存是用户空间和内核都知道的东西。 我不知道在这种情况下"归属"是什么意思。
相关文章:
- 如果"new int"返回"int*",那么为什么"new int[n]"不返回"int**"?
- 如果整个应用程序是虚拟映射的,为什么 new 会进行系统调用?
- 为什么我的全局 new() 覆盖被绕过了?
- 在C++中,如果我可以直接将整数分配给指针而不使用"new",为什么要使用"new"?
- 为什么 std::make_shared 无法编译带有已删除运算符 new 的类型?
- 为什么 std::vector 使用 std::分配器而不是运算符 new 和 delete?
- 为什么销毁被放置 new 覆盖的对象不是未定义的行为?
- 在C++中,为什么int可以使用new运算符初始化变量,而double不能
- C++:为什么可以在没有事先使用 new 的情况下在指向结构的指针上使用 delete?
- 为什么运算符"new"需要指针才能工作?
- 重载运算符 new(),为什么构造函数被调用两次?
- 为什么运算符 new[] 为数组的大小分配内存?
- 为什么 new 第一次分配 1040 个额外的字节?
- 为什么"make_unique"使用"new",而make_shared使用&q
- 为什么允许重新定义全局运算符 new(size_t)?
- 为什么要在不同的连接(新的InternetOpen和New Internet Connect)上对HttpsendReq
- 为什么我的对象似乎在不使用new”的情况下在堆上
- 为什么我不能将 new创建的客户端对象分配给unique_ptr
- 为什么在这种情况下使用 int *arr = new int [number]
- 为什么"new vector<int>[5]"不创建向量数组?