<aside> 📖 概念上的定义
char *p 可以和 intptr_t 互相转换
可以指向 “任何地方”
进程的地址空间:若干连续的 “段”
<aside> 📖 操作系统提供查看进程地址空间的机制
pmap - report memory map of a process
本质是通过读取 /proc/[pid]/maps
实现
信息中包含:
<aside> 📖 vDSO (virtual dynamic shared object)
无需陷入内核的系统调用,如 gettimeofday
维护有 vvar
这样的公共只读空间
系统调用就是一组接口的约定,并不一定要陷入内核态执行
</aside>
<aside> 📖 管理进程地址空间的系统调用
进程的地址空间 = 内存里若干连续的 “段”
// 映射
void *mmap(void *addr, size_t length, int prot, int flags,
int fd, off_t offset);
int munmap(void *addr, size_t length);
// 修改映射权限
int mprotect(void *addr, size_t length, int prot);
</aside>
<aside> 📖 映射
把文件映射到了进程地址空间:文件 = 字节序列 = 内存
可以快速完成大范围空间的映射
但这样也会产生Memory-Mapped File的一致性问题
</aside>
<aside> 📖 地址空间:实现进程隔离
每个 *ptr 都只能访问本进程 (状态机) 的内存