一、進程空間
老規矩,上圖:
進程空間
虛擬內存和真實內存之間的轉換
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;
}