C语言关键字
程序内存组成:运行的程序分为代码区,数据区,BBS区,栈区,堆区
-
代码区:存放代码的内存区域,在程序运行前就已经确定
-
数据区:存放被赋予初始值的全局变量、静态变量和字符串常量
-
BBS区:存放初始化的全局变量和静态变量,内核将此段初始化为0
-
栈区:增长方向,自上而下增长,存放临时创建的局部变量,存储函数调用的形参和返回值
-
堆区:动态存储部分,由程序员分配、释放。
-
如果程序员使用完申请的堆内存没有及时把它释放掉,那么这块内存就丢失了,就存在内存泄漏,内存的分配就变成不是连续的
-
程序运行中动态分配的存储空间
-
通常用malloc或new在堆中分配内存
-
volatile
可以防止变量被编译器优化,每次读取变量时,直接从变量地址中读取数据
- 内存映射,通过内存寻址访问寄存器A
#define A (*(volatile unsigned long*) 0x40000000)
- 如果该变量是多任务共享的,可以用volatile修饰
static
-
作用于局部变量:表示该变量是静态局部变量
普通的局部变量存储在栈上,函数每执行一次,都需要初始化一次
静态局部变量存储在全局数据区,只初始化一次 -
作用于全局变量:表示该变量是静态全局变量
只初始化一次,不能被其他文件调用,不会和他文件中相同名字的变量发生冲突 -
作用于当前函数:该函数为静态函数,不能在其他文件中直接被调用,好处,不会和其他文件中的函数冲突
//实现 0-255 循环
void Func(void)
{
static unsigned char cnt=0;
unsigned char buf[1];
buf[0] = cnt++;
delay(100);
}