嵌入式C语言内存操作
2022/2/28 7:22:51
本文主要是介绍嵌入式C语言内存操作,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
文章目录
- 1. 指针
- 1.1 指针概念
- 1.2 指针+修饰符
- 1.3 指针+运算符
- 1.4 多级指针
- 2. 数组
- 2.1 数组的定义与初始化
- 2.2 数组空间的初始化
- 2.3 指针与数组
- 3. 结构体,共用体
- 3.1 字节对齐
- 4. 内存分布图
- 4.1 栈空间
- 4.2 堆空间
- 4.3 只读空间
- 4. 内存分布图
- 4.1 栈空间
- 4.2 堆空间
- 4.3 只读空间
- 吐槽
嵌入式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 只读空间
吐槽
写不动了写不动了,太菜了太菜了;
这篇关于嵌入式C语言内存操作的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-15PingCAP 黄东旭参与 CCF 秀湖会议,共探开源教育未来
- 2024-05-13PingCAP 戴涛:构建面向未来的金融核心系统
- 2024-05-09flutter3.x_macos桌面os实战
- 2024-05-09Rust中的并发性:Sync 和 Send Traits
- 2024-05-08使用Ollama和OpenWebUI在CPU上玩转Meta Llama3-8B
- 2024-05-08完工标准(DoD)与验收条件(AC)究竟有什么不同?
- 2024-05-084万 star 的 NocoDB 在 sealos 上一键起,轻松把数据库编程智能表格
- 2024-05-08Mac 版Stable Diffusion WebUI的安装
- 2024-05-08解锁CodeGeeX智能问答中3项独有的隐藏技能
- 2024-05-08RAG算法优化+新增代码仓库支持,CodeGeeX的@repo功能效果提升