进程中使用的内存

  1. 1. 内存分配场景
  2. 2. 创建进程时的内存分配
    1. 2.1. 多进程
    2. 2.2. 启动一个程序
  3. 3. 进程申请动态内存

1. 内存分配场景

内核为进程分配内存,有两种情况:

  1. 创建进程时。
  2. 进程申请动态内存。

2. 创建进程时的内存分配

在Linux系统中,创建进程有两种场景:

  1. 一个程序使用多进程结构并行处理业务。
  2. 启动一个程序。

2.1. 多进程

  想要将一个程序分成多个进程进行处理,需要使用fork()函数。fork函数基于当前进程(父进程)创建一个完全一样的新进程(子进程)。两个进程一起从fork函数返回,从此开始执行不同的代码。但是需要注意,在父进程中,fork返回子进程的ID,而子进程中的fork返回0。
  fork创建新进程的速度还是很快的,因为这个fork并不会复制父进程的内存空间,而是和父进程共享一个写时复制的内存空间,两个进程可以同时自由的读取内存,但是任意一个进程需要修改内存时,就会复制一份给修改方单独使用。

2.2. 启动一个程序

  在fork后,我们可以在新进程中使用exec()族函数来拉取一个新的二进制文件,也就是使用新的内存映像替换当前的映像,并从入口开始执行。

3. 进程申请动态内存

  进程开始运行后,如果需要申请更多内存,就会向内核发出内存申请请求。然后内核在可用内存中分出一块相应大小的内存块,并将起始地址返回给进程。

comments powered by Disqus