一、进程空间
老规矩,上图:
进程空间
虚拟内存和真实内存之间的转换
int main(int argc,char * argv[],char **env)//命令行参数和环境变量
environment variables
{
while(*env)
{
printf("%s\n",*env++);
}
}
stack 由上向下,大到小;heap由下向上,小到大
uninitialized data(bss):未初始化变量i,a等等存放在这里,initialized to zero by exec;
char*p = "china" 存放在initialized data上的ro只读数据段。p存放在栈上。
int a = 4 存放在data 上的rw数据段。
int array[10](10个空间存放在栈上) = {0,1,2,3,4} (存放在text段 上);
#include<stdio.h>//函数的压栈与存储
char*fa()
{
char*pa = "123456";
char*p = NULL;
p = (char*)malloc(100);
strcpy(p,"caijinlong 1234566");
return p;
}
char*fb()
{
char*pstr = NULL;
pstr = fa();
return pstr;
}
void main()
{
char*str = NULL;
str = fb();
printf("str = %s\n",str);
free(str);
str = NULL;
return 0;
}