内存分区:代码区 数据区
•编译器会为程序开辟所使用的内存空间。
•程序要素分别存储在:代码区
、数据区
。
•代码区放在只读区,数据放在可读可写区。
代码区
•存放CPU执行的机器指令
•共享(生成一份exe文件)
•只读(防止程序被意外修改指令)
代码一旦编写完毕,运行过程中不允许任意修改,为了保护代码,在设计的时候,代码就放在只读的内存区域,存放代码的区域叫做代码区。
数据区
栈区:
存放函数参数值和局部变量,由编译器自动分配和释放 可读可写
全局/静态区:
存放全局变量,静态变量(静态全局,静态局部) 可读可写
字符串常量区:
字符串常量,程序运行之前创建,运行之后销毁,只读不可修改
堆区:
由程序员调用malloc()函数
来主动申请的,需使用free()函数
来释放内存,若申请了堆区内存,之后忘记释放内存,很容易造成内存泄漏。
全局变量与局部变量
#include <stdio.h>int p1 = 10;//p1全局变量,可以在任何地方被使用,可以在main函数中使用,也可以在a函数中使用。void a() {int p1 = 30;//p1为局部变量,只能在花括号内部被使用printf("%d", p1);};int main() {int p1=20;//p1为局部变量,只能在花括号内部被使用printf("%d\n", p1);a();return 0;}
全局变量与局部变量区别
•全局变量保存在内存的全局存储区中,占用静态的存储单元;
•局部变量保存在栈中,只有在所在函数被调用时才动态地为变量分配存储单元。
•1.作用域不同
全局变量的作用域为整个程序,而局部变量的作用域为当前函数或循环等
• 2.内存存储方式不同
全局变量存储在全局数据区中,局部变量存储在栈区
•3.生命期不同
全局变量的生命期和主程序一样,随程序的销毁而销毁,局部变量在函数内部或循环内部,随函数的退出或循环退出就不存在了。
•4.使用方式不同
•全局变量在声明后程序的各个部分都可以用到,但是局部变量只能在局部使用
•函数内部会优先使用局部变量再使用全局变量
#include <stdio.h>int p1 = 10;void a() {int p1 = 30;printf("%d", p1);};int main() {a();//输出的值为30return 0;}

文章转载自小柯南有话说,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。





