MMKV源码解读与理解_mmkv_io(1),四年HarmonyOS鸿蒙面试遇到的问题整理

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新HarmonyOS鸿蒙全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img

img
img
htt

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上鸿蒙开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip204888 (备注鸿蒙)
img

正文

kvHolder.valueSize = static_cast<uint32_t>(s_size);

m_position += s_size;
} else {
throw out_of_range(“InvalidProtocolBuffer truncatedMessage”);
}
}

数据写入与读取

这里仅分析在 Android 平台的主流程逻辑,因此对于加密功能和在 iOS 设备上的逻辑不去关注。由于 MMKV 对于 value 支持多种类型格式,这里也主要通过类型为 int 和 string 的写入和读取逻辑来进行了解。

MMBuffer

MMKV 中定义的内存单元,用来更方便的进行一些操作而抽象的结构。对于占用内存小的数据,直接保存在栈中,而对于占用内存大的数据则保存在堆中。 判断占用内存的大小取决于 sizeof(MMBuffer) - offsetof(MMBuffer, paddedBuffer) 计算的值,其实也就是 paddedBuffer[10] 的大小。这里应该是考虑到对于基本数值类型进行 protobuf 编码后最多占用10个字节,因此使用这种方式来更高效的进行内存操作。 MMBuffer 中包含一个联合体,其中的两个结构体共用存储空间,在实际使用时只能使用其中的一个。在默认情况下,编译器会对 MMBuffer 进行内存对齐,添加了 7 个填充字节,以保证 size 和 ptr 成员都按照 8 字节对齐。而对于第二个结构体,由于其成员都是 1 字节大小,因此没有进行内存对齐,没有填充字节。其内存布局如下:

±-------------------±-----------------------±--------------±-------------+
| isNoCopy(1 byte) | padding(7 bytes) | size(8 bytes) | ptr(8 bytes) |
±-------------------±-----------------------±--------------±-------------+
±-------------------±---------------------------+
|

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值