首先 在这之前我们应该要知道进程虚拟空间: 系统程序中访问的内存地址不是实际的物理内存地址,而是一个虚拟地址,然后由操作系统将这个虚拟地址映射到适当的物理内存地址上。
系统给了我们4个g的虚拟地址空间 其中一个1个g给了内核 3个g给了我们用户 而这三个g我们分为四个区
1 栈空间: 这里面有局部变量 函数形参 自动变量 、(这个是由系统管理 并且先进来的后出去 ,简称先进后出)
2堆空间: malloc calloc ralloc (先进先出,用户管理)
3全局数据区: bbs(未初始化的全局变量) ordata(常量) 静态数据区(初始化的全局变量 static修饰的变量)
4代码段
就全局变量和局部变量来讲 有以下几点不同
第一个 作用域 前者文件结束前有效 后者只在当前函数有效
第二个 存储类型 前者在栈空间 后者在全局数据区
第三个 初始化 如果没有给他一个初值 前者会自动归零 后者回事一个垃圾值
第四个 如果两个变量同名 那么局部变量优先执行