linux 进程virt、res内存分析
测试代码:#include<stdio.h>#include<stdlib.h>#include<string.h>void main() {char a;printf("please set:");printf("malloc 10M virt mem:");scanf("%s", &a);char *p = (char*)malloc(10*1024
测试代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void main() {
char a;
printf("please set:");
printf("malloc 10M virt mem:");
scanf("%s", &a);
char *p = (char*)malloc(10*1024*1024*sizeof(char)) ;
char *p1 = p;
printf("p address: %x\n", p);
printf("use 5M res mem:");
scanf("%s", &a);
memset(p, 'a', 5*1024*1024);
printf("p address: %x\n", p);
printf("free virt and rss mem:");
printf("p address: %x\n", p);
scanf("%s", &a);
free(p);
printf("end ");
scanf("%s", &a);
}
编译后生成文件执行gcc test.c -o test
1.未申请内存时
此时virt、res主要存储代码堆栈、变量a的空间
2.给p指针申请5M空间
此时,给进程分配10M virt虚拟机内存,但res常驻内存空间不被占用(不占用物理内存)
3.给p指针指向的空间进行5M内存进行memset,使用该空间
此时virt虚拟内存空间不再增加,res常驻内存增加5M
4.释放内存空间
virt虚拟内存和res常驻内存都被释放
总结:virt包含程序运行存储代码的堆栈存储、malloc申请的空间、数据空间;res只包括实际使用的内存,即代码堆栈空间、数据空间(包含malloc申请后被使用的部分,申请后未被使用的内存不计入res中)
更多推荐
所有评论(0)