关于static的认知。

首先说一下堆和栈

堆和栈都是在内存区也就是RAM区,全局变量也是在程序运行时自动存放在RAM区

int a=0;   //全局初始化区 RAM

char *p1;   //全局未初始化区 RAM

main()

{

int b;   //栈 RAM

char s[]="abc";   //栈 RAM

char *p3= "1234567";   //在文字常量区Flash ROM

static int c =0 ;   //静态初始化区 RAM

p1= (char *)malloc(10);   //堆区 RAM

strcpy(p1,"123456");   //"123456"放在常量区 ROM

}

栈区是有限的 一般也特别小,主要存放程序在运行时的局部变量,如果在函数内部初始化的时候不加static那么他的数据默认就存放的栈区。由系统自动释放

堆区在物理内存存放地址上和栈区是相邻的,但堆区一般比栈区要大,他可以由用户手动分配(malloc,calloc)但必须由用户手动释放,不跑操作系统的话不释放会可能造成内存溢出,影响下一个存储区的数据导致程序出现异常,跑操作系统后操作系统会将内存回收再分配,但也可能存在溢出的可能,最好是用完释放(free)。

所以我们在写工程时候必须要注意static的使用,在函数封装时候带上static他将不会将数据放的栈区,当别人调用或者是移植你所封装的函数时将不会造成由于栈区空间不足所造成不可预知的BUG,函数的形参实际也是存放在栈区

对应的还有const修饰符,他会将数据修饰成常量,只能读取而不能改变存放在flash(ROM)中。

关于volatile修饰符可以看这个。点击打开链接



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值