文章目录
嵌入式C语言内存空间的使用;
1. 指针
1.1 指针概念
内存类型资源的地址;
指针变量: 存放指针这个概念的盒子;
在32 bit系统中,指针就4个字节;
指针指向内存空间,一定要保证合法性;
1.2 指针+修饰符
修饰符 | 内容解释 |
---|---|
const | 常量,只读(不能变) |
volatile | 防止优化执行内存地址 |
typedef | 别名方便理解代码 |
1.3 指针+运算符
-
+
:指针的加法运算,实际上加的是一个单位,单位的大小可以使用sizeof(p[0])
查看;++
: 实际作用为更新地址;减法类似;
-
[]
:标签访问;可以作为地址变量; -
逻辑操作符:一般地址不进行大小比较,通常使用等价;
1.4 多级指针
int **p
: 存放地址的地址;
2. 数组
指针变量的特殊化,是内存分配的一种形式;
2.1 数组的定义与初始化
定义一个空间,有空间的大小,以及所需要的读取方式;
命名规则: 数据类型 数据名[m]
m的作用域是在申请的时候;
数组名字为常量,一定不要放在 = 的左边;
2.2 数组空间的初始化
按照标签逐一处理即可;例如:
int a[2];
a[0] = 1;
a[1] = 2;
如果一个个赋值工作量比较大,所以可以写为下列进行赋值操作;
int a[2]={1,2}
数组空间的初始化和变量的初始化本质不同,尤其在嵌入式的裸机开发中,空间的初始化往往需要库函数的辅助;
非字符串空间初始化:
字符空间,ASCII码编码来解码的空间,是为了方便阅读。
非字符空间,如数据采集,开辟一个存属数据盒子。
2.3 指针与数组
- 指针数组定义:
char *a[];
- 二维数组指针定义:
int *p[m];
3. 结构体,共用体
3.1 字节对齐
为了提高执行效率,牺牲一点空间换取时间效率,最终结构体的大小一定是4的倍数;
定义结构体的顺序不同,大小也不同;
4. 内存分布图
4.1 栈空间
4.2 堆空间
4.3 只读空间
终结构体的大小一定是4的倍数;
定义结构体的顺序不同,大小也不同;
4. 内存分布图
4.1 栈空间
4.2 堆空间
4.3 只读空间
吐槽
写不动了写不动了,太菜了太菜了;