尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

今天是学习嵌入式的第15天

今天是学习嵌入式的第15天 今天学习了共用体、枚举、位运算、内存管理一、共用体union1. 核心特点所有成员共用同一块内存空间同一时刻只能存一个成员的数据改一个成员的值别的成员数据直接被覆盖。2. 内存大小占的字节数等于里面最大成员的字节数不像结构体是所有成员大小相加。3. 常见用途节省内存、判断系统大小端、不同格式数据互相解读。4. 易错点别同时用好几个成员赋值读取后赋值的会把前面数据冲掉。二、枚举enum1. 本质给一堆固定的整数起好记的名字比如星期、月份、状态码代码可读性直接拉高。2. 默认规则第一个枚举值默认是0往后依次1也可以手动指定某个值后面继续顺延递增。3. 用法场景限定变量只能取规定范围内的值避免随便乱赋值比如开关状态、性别、季节这类固定选项。4. 小提醒枚举本质就是整型能和int互相赋值运算但尽量只用来存预设选项别乱混用数字。三、位运算直接操作二进制0和1一共6种常用通俗讲1. 按位与对应位都为1结果才是1常用按位清零、取某几位数据2. |按位或对应位有一个1结果就是1常用给某一位置1、拼接标志位3. ^异或对应位不一样为1、一样为0特性一个数异或自己0异或0不变可用来两数交换、加密4. ~按位取反0变1、1变0注意有符号数会涉及符号位容易出负数坑5. 左移整体二进制往左挪右边补0左移n位≈乘以2ⁿ不溢出前提下6. 右移整体往右挪无符号数左边补0有符号正数补0、负数补符号位右移n位≈除以2ⁿ实用小场景用一个int的多个二进制位存多个开关状态极度省内存硬件寄存器配置也全靠位运算。易错移位位数不能超过变量本身总位数不然结果无意义。四、内存管理重点区分栈、堆malloc/free核心1. 两块核心内存区域• 栈内存普通局部变量、数组函数运行时自动分配函数结束自动回收不用手动管空间小大小编译时就得定死不能运行时改大小。• 堆内存程序员手动申请手动释放空间大运行时才能确定大小不会自动回收不释放就内存泄漏。2. malloc / free 核心用法• malloc(字节数)堆上申请一块连续内存返回void*通用指针申请失败返回NULL用之前必须判空规范写法搭配sizeof(类型)别手写固定字节数。• free(指针)归还malloc申请的堆内存只能传malloc返回的原始首地址不能传偏移后的指针禁止free栈上变量、重复free同一块内存。• 好习惯free之后立刻把指针赋值NULL避免变成野指针乱访问。3. 补充两个配套函数• calloc(个数,单个字节)申请同时自动把内存全部初始化为0• realloc(旧指针,新大小)扩容/缩小已申请的堆内存地址可能变动要用新指针接收返回值。4. 易出错① 忘记free → 内存泄漏长时间运行程序越跑越卡② free之后继续读写 → 野指针访问直接段错误崩溃③ 数组越界读写堆/栈内存 → 破坏周边数据随机bug最难排查④ scanf、局部变量栈溢出也会踩内存边界要控制输入长度。速记共用体省内存、成员互覆盖枚举固定选项、替代魔法数字位运算操作二进制位省内存适配硬件内存管理分清栈堆malloc配对free杜绝泄漏和野指针。
返回列表