《程序员自我修养》 笔记

温故而知新

平坦内存模型存在的问题

分段

分页

线程 与 进程

线程的私有空间

预处理,编译,汇编,链接

静态链接

目标文件(ELF格式)

文件内容

强符号 与 弱符号

符号修饰

extern

地址和空间分配 + 重定位和符号决议 = 链接

main 函数之前和之后的内容

初始化进程环境,堆分配初始化,传递main 的参数,全局变量的初始化等。 .init 段: .fini 段:

可执行文件的装载与进程

32位平台下的4G内存空间,1GB内核,1GB用户态。

加载方式-页映射

进程的建立

页错误

进程装载细节

堆栈分配

堆内存分配方式

从操作系统角度来看,进程分配内存有两种方式,分别由两个系统调用完成:brk()和mmap()(不考虑共享内存)。

1、brk是将数据段(.data)的最高地址指针_edata往高地址推;

2、mmap是在进程的虚拟地址空间中(堆和栈中间,称为文件映射区域的地方)找一块空闲的虚拟内存。

这两种方式分配的都是虚拟内存,没有分配物理内存(不准确,系统调用会执行内核函数,分配内存),在第一次访问已分配的虚拟地址空间的时候,发生缺页中断,操作系统负责分配物理内存,然后建立虚拟内存和物理内存之间的映射关系。

03-18 01:35