关于C/C++,Linux/MacOS/Windows 平台虚拟内存分配

在 Windows 平台上面建议通过 VirtualAlloca、VirtualAllocaEx 核心库函数来分配虚拟内存,而不是通过 MMF(Memory Mapping File / 内存映射文件)技术来载入虚拟内存。

这是因为,在 Windows 平台上面,通过MMF技术分配的虚拟内存,若程式运行过程中没有手动调用 FlushViewOfFile 刷入内存映射文件改变函数,就会导致程序在退出的时候,由于分配的虚拟内存过大涉及改动的虚拟内存页过多,这个时候内核就会挂住进程,以完成改变内存同步到文件的动作。

1、写入磁盘IO占用过大

2、程序一直无法退出(内核挂起进程)

MacOS 上面不建议使用匿名共享内存来分配虚拟内存,注意:并非不可用,单纯只是有OS X系统版本API兼容限制。

基于 boost 基础框架类库之中提供的:

<boost/interprocess/shared_memory_object.hpp> 

<boost/interprocess/mapped_region.hpp>

库头文件,大家可以轻松实现 MacOS、Windows、Linux 跨平台兼容性的匿名共享内存分配(:它们需要被映射,属于虚拟内存的一种)。

但上面也提到 MacOS 会有版本兼容限制,所以 Linux、MacOS,若希望统一虚拟内存访问的源实现,那么采用 MMF(内存映射文件)是一个很好的解决方案。

在大多数这两个平台上面需要分配虚拟内存的应用程序,都首选该方法,但可惜的是,这会占用一定的磁盘空间,但这个可以被缓解,即当文件被映射到内存之后,立即调用 unlink 函数删除被映射的文件,即可。

在 Windows 早前版本是无法删除正在被映射的文件的,但是在 Windows 11 及以上平台是允许删除正在映射过程之中的文件的,此时通过 PC Hunter、ProcExp 等系统工具,可以检索到进程内存映射的文件变成匿名文件。

相关推荐

  1. 关于C/C++,Linux/MacOS/Windows 平台虚拟内存分配

    2024-03-25 06:40:03       37 阅读
  2. 【嵌入式 - 关于MCU的内存分配

    2024-03-25 06:40:03       22 阅读
  3. 关于c语言在内存中的分配管理

    2024-03-25 06:40:03       22 阅读
  4. debian11,debian 如何删除虚拟内存,交换分区

    2024-03-25 06:40:03       63 阅读
  5. 虚拟平台主流hypervisor工作原理分析

    2024-03-25 06:40:03       22 阅读
  6. 虚拟内存知识详解

    2024-03-25 06:40:03       40 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-25 06:40:03       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-25 06:40:03       106 阅读
  3. 在Django里面运行非项目文件

    2024-03-25 06:40:03       87 阅读
  4. Python语言-面向对象

    2024-03-25 06:40:03       96 阅读

热门阅读

  1. C语言学习笔记day14

    2024-03-25 06:40:03       36 阅读
  2. linux命令(CentOS7)yum provides

    2024-03-25 06:40:03       41 阅读
  3. 网络基础:构建你的数字世界之桥

    2024-03-25 06:40:03       36 阅读
  4. 面试宝典:MySQL索引进阶深度分析

    2024-03-25 06:40:03       38 阅读
  5. Android下的Touch事件分发详解

    2024-03-25 06:40:03       36 阅读
  6. 【Android 内存优化】Koom核心内存指标分析

    2024-03-25 06:40:03       40 阅读
  7. 【兆易创新GD32H759I-EVAL开发板】USB设备 介绍1

    2024-03-25 06:40:03       42 阅读
  8. 维吉尼亚(Vigenere)密码

    2024-03-25 06:40:03       38 阅读
  9. python | yield用法详解

    2024-03-25 06:40:03       43 阅读