|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
文件处理命令:file、mkdir、grep、dd、find、mv、ls、diff、cat、ln
我们都晓得,MongoDB利用内存映照的体例来举行数据文件的存取操纵。本文的目标就在于形貌操纵体系假造内存的利用及内存映照的外部完成。
以下是译文
当你运转一个程序,程序中有很多工具必要存储,堆、栈和各类功效库。而这统统在你写程序时大概都不必要本人把持,Linux内核会帮你完成这些存储的调剂,你只必要告知它你必要做甚么,内核就会在符合的中央给你分派内存空间。本文次要经由过程几个实例程序的内存利用研讨,来为人人展现Linux的内存利用情况。
第一个例子:上面一段程序会打印出程序的pid(历程号)后挂起。- #include<stdio.h>#include<unistd.h>#include<sys/types.h>intmain(){printf("run`pmap%d`
- ",getpid());pause();}
复制代码 将下面代码保留成文件mem_munch.c然后运转上面程序编译并实行:- $gccmem_munch.c-omem_munch$./mem_munchrun`pmap25681`
复制代码 下面历程号是25681,大概你实验的了局会不太一样。
上面我们经由过程pmap命令来检察一下这个小程序的内存利用情形- $pmap2568125681:./mem_munch00000000004000004Kr-x--/home/user/mem_munch00000000006000004Kr----/home/user/mem_munch00000000006010004Krw---/home/user/mem_munch00007fcf5af880001576Kr-x--/lib/x86_64-linux-gnu/libc-2.13.so00007fcf5b1120002044K-----/lib/x86_64-linux-gnu/libc-2.13.so00007fcf5b31100016Kr----/lib/x86_64-linux-gnu/libc-2.13.so00007fcf5b3150004Krw---/lib/x86_64-linux-gnu/libc-2.13.so00007fcf5b31600024Krw---[anon]00007fcf5b31c000132Kr-x--/lib/x86_64-linux-gnu/ld-2.13.so00007fcf5b51200012Krw---[anon]00007fcf5b53900012Krw---[anon]00007fcf5b53c0004Kr----/lib/x86_64-linux-gnu/ld-2.13.so00007fcf5b53d0008Krw---/lib/x86_64-linux-gnu/ld-2.13.so00007fff7efd8000132Krw---[stack]00007fff7efff0004Kr-x--[anon]ffffffffff6000004Kr-x--[anon]total3984K
复制代码 下面的了局是这个程序的内存利用情形,实在更切实的说是这个程序以为它利用内存的情形。从下面的了局我们能看到,当你会见libc库时,实践上是对内存地点00007fcf5af88000的会见,当你会见ld库时,实践上是对内存地点00007fcf5b31c000的会见。
下面的输入大概还对照笼统,上面我们修正一下下面的程序,我们在程序的堆和栈上各放一块数据。- #include<stdio.h>#include<unistd.h>#include<sys/types.h>#include<stdlib.h>intmain(){inton_stack,*on_heap;//部分变量是放在栈上的,以是on_stack的地点就是栈的初始地点on_stack=42;printf("stackaddress:%p
- ",&on_stack);//malloc的内存是在堆上分派的on_heap=(int*)malloc(sizeof(int));printf("heapaddress:%p
- ",on_heap);printf("run`pmap%d`
- ",getpid());pause();}
复制代码 编译运转:- $./mem_munchstackaddress:0x7fff497670bcheapaddress:0x1b84010run`pmap11972`
复制代码 然后再用pmap命令检察一下内存利用:- $pmap1197211972:./mem_munch00000000004000004Kr-x--/home/user/mem_munch00000000006000004Kr----/home/user/mem_munch00000000006010004Krw---/home/user/mem_munch0000000001b84000132Krw---[anon]00007f3ec4d980001576Kr-x--/lib/x86_64-linux-gnu/libc-2.13.so00007f3ec4f220002044K-----/lib/x86_64-linux-gnu/libc-2.13.so00007f3ec512100016Kr----/lib/x86_64-linux-gnu/libc-2.13.so00007f3ec51250004Krw---/lib/x86_64-linux-gnu/libc-2.13.so00007f3ec512600024Krw---[anon]00007f3ec512c000132Kr-x--/lib/x86_64-linux-gnu/ld-2.13.so00007f3ec532200012Krw---[anon]00007f3ec534900012Krw---[anon]00007f3ec534c0004Kr----/lib/x86_64-linux-gnu/ld-2.13.so00007f3ec534d0008Krw---/lib/x86_64-linux-gnu/ld-2.13.so00007fff49747000132Krw---[stack]00007fff497bb0004Kr-x--[anon]ffffffffff6000004Kr-x--[anon]total4116K
复制代码 此次多出了下面白色的一行内容,白色内容就是堆的肇端地位:- 0000000001b84000132Krw---[anon]
复制代码 在我们程序运转的输入里也有一行白色的输入,这是这个地点在程序中的内存地点:这两个地点基础上是一样的,个中的anon是Anonymous的缩写,标明这段内存是没有文件映照的。
我们再看下面绿色的两行,与下面绝对应,这两行分离是用pmap和使用程序看到的栈肇端地点:- 00007fff49747000132Krw---[stack]
复制代码- stackaddress:0x7fff497670bc
复制代码 下面说到的内存利用,都只是程序以为本人对内存的利用,实践上程序在分派内存是不晓得体系内存的形态的。以是下面的输入都只是从程序本人的角度看到的内存利用情况。好比在下面的例子中,我们看到程序的内存地点空间是从0 |
|