C/C++教程

嵌入式C语言内存操作

本文主要是介绍嵌入式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 指针+运算符

  1. +:指针的加法运算,实际上加的是一个单位,单位的大小可以使用sizeof(p[0])查看;

    ++: 实际作用为更新地址;

    减法类似;

  2. []:标签访问;可以作为地址变量;

  3. 逻辑操作符:一般地址不进行大小比较,通常使用等价;

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 指针与数组

  1. 指针数组定义:char *a[];
  2. 二维数组指针定义:int *p[m];

3. 结构体,共用体

3.1 字节对齐

为了提高执行效率,牺牲一点空间换取时间效率,最终结构体的大小一定是4的倍数;

定义结构体的顺序不同,大小也不同;

4. 内存分布图

4.1 栈空间

4.2 堆空间

4.3 只读空间

终结构体的大小一定是4的倍数;

定义结构体的顺序不同,大小也不同;

4. 内存分布图

4.1 栈空间

4.2 堆空间

4.3 只读空间

吐槽

写不动了写不动了,太菜了太菜了;

这篇关于嵌入式C语言内存操作的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!