0%

嵌入式Linux内存使用

嵌入式Linux内存使用

free

free 用于查看系统当前可用内存

$ free -w
              total        used        free      shared     buffers       cache   available
Mem:        7849348     4354992      480804     1418400      741732     2271820     1785104
Swap:      25033724      603124    24430600
  • buffers 用来给Linux系统中块设备做缓冲区

    A buffer is something that has yet to be “written” to disk.

  • cache 用来缓冲打开的文件

    A cache is something that has been “read” from the disk and stored for later use.

  • 一般情况理解下认为系统的真正剩余内存为 free + buffers + cached
  • 但是 cached 不是一定可以释放出来,例如文件未关闭

meminfo

更加详细的信息/proc/meminfo

虚拟内存与物理内存

操作系统为程序员屏蔽了物理内存的使用,在32位操作系统中,每个进程面对的都是4GB的内存空间,称为虚拟内存。操作系统采用了延迟分配物理内存的策略,针对进程的内存分配请求,它只是在内核中分配了一段虚拟地址,只有当确实使用这块内存时,系统才会为其分配物理地址。

malloc/free

程序调用 malloc 函数申请内存时,并不是直接向操作系统申请,而是先由 glibc 的内存管器模块接收请求,它再通过系统调用向内核申请一块内存并将地址 p 返回给用户,同时,在 p-4 这个地址记录下 malloc 空间的大小,glibc 在 free 这块内存的时候,通过 p-4 即可知道需要释放的内存大小是多少。

Refs

  1. Linux free字段解析
  2. Linux内存Cache和Buffer理解