我正在运行 Arch Linux。在 中/usr/include/sys/mman.h
,它说:
/* Definitions for BSD-style memory management.
Copyright (C) 1994-2019 Free Software Foundation, Inc.
.
.
.
这是什么意思?与其他风格相比,“BSD 风格”内存管理有何特别之处?
答案1
我认为区别在于 C 标准内存管理(malloc
,free
ETC。,其下降自Unix v6alloc
等) 和内存映射 I/O,它通过 BSD 进入 Unix 家族(虽然它首先在 SunOS 中实现,显然是在 4.2BSD 中记录后但没有在那里实现;最终 BSD 实现来自马赫)。与后者相关的函数都声明在sys/mman.h
。
答案2
历史上,BSD 通过 mmap() 等提供了内存映射 I/O,而 System V 则引入了共享内存段作为新 IPC 包(shmget() 等)的一部分。
从功能上来说,区别在于内存映射 I/O 由文件支持,而共享段则不然。创建进程退出后,共享段仍保持分配状态,这就是它们位于 IPC 包中的原因。在多线程出现之前,如果需要使用多个 CPU,常见的编程模型是启动一堆映射到同一共享段的进程。
从技术上讲,POSIX 不需要 mmap 来支持匿名映射,这与共享段类似。实际上,当前的每个实现都支持它们,这使其成为一个有争议的问题。 “BSD 风格”占据了主导地位,成为事实上的标准。