day28内存区域

1.内存
物理内存:实实在在存在的存储设备;
虚拟内存:操作系统虚拟出来的内存;
虚拟内存分块:在32位系统下,每个进程运行着的程序的寻址范围是4G; 0x0000 0000- 0xffff-ffff;
2.内存区域划分
堆: 动态申请内存的时候,在堆里开辟内存;
栈: 主要存放局部变量;函数临时数据,参数等;返回值;
静态全局区: 未初始化的静态全局区 :静态变量,或全局变量
初始化的静态全局区: 全局变量、静态变量
代码区:运行的代码;
文字常量区:存放常量的

**普通全局变量 和静态全局变量 **

int num = 100; 普通全局变量 适用于整个程序
int main()
{
 return 0;
}
static int num = 0;//static限定了静态全局变量,作用范围只能再它定义的.c 源文件有效;
int main()
{
 return 0;
}

普通局部变量和静态局部变量

#include
void fun(void)
{
 int num=3;
 num++;
 printf("num=%d\n",num);
}
int main()
{
 fun();
 fun();
 fun();
 return 0;
}
每次调用时都是开辟空间,调用结束后就释放空间;结果是444
#include
void fun(void)
{
 static int num=3;
 num++;
 printf("num=%d\n",num);
}
int main()
{
 fun();
 fun();
 fun();
 return 0;
}
静态局部变量  结果是456  第一次调用函数的时候,开辟空间赋值,函数结束后,不释放,以后再调用函数的时候,就不再为其开辟空间,也不赋初值,用的是以前的那个变量;

重名情况

#include
int num=100;
int main()
{
 int num=1;
 printf("in main fun num=%d\n",num);
}
结果为1.采用就近原则;

外部函数和内部函数
static修饰函数称为内部函数,只能在同一个.c中的函数调用;

#include
extern int funB(void);
extern int funA(void);
int num=3;
int main()
{
    int num=5;
    printf("num=%d\n",num);//就近原则使用局部变量值 5
    printf("funA=%d\n",funA());
    printf("funB=%d\n",funB());//这里调用的是在fun2.c中
    return 0;
}

fun.c中
static int num=11; //静态全局变量是当前.c 普通全局变量是整个程序;
int funA(void)
{
    return num;
}
static int funB(void)//内部函数只能在当前.c被调用;
{
    return 7;
}
在fun2.c中

int funB(void)
{
    return 8;
}
结果
     5
    11
    8

你可能感兴趣的:(开发语言,内存)