嵌入式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
即可知道需要释放的内存大小是多少。