Android智能指针sp/wp原理
谈到智能指针,大家首先想到的肯定是std::shared_ptr,其实Android binder中也实现了一套智能指针sp/wp,原理类似,也是基于引用计数。Android之所以自己搞一套,估计是因为当时的C++标准还不完善。 我司的基础库中也有一套自研的智能指针,和Android中的实现类似。之所以写这篇文章,是因为最近发现这里面隐藏多年的一个bug:特定场景下weak_ptr虽然能提...
谈到智能指针,大家首先想到的肯定是std::shared_ptr,其实Android binder中也实现了一套智能指针sp/wp,原理类似,也是基于引用计数。Android之所以自己搞一套,估计是因为当时的C++标准还不完善。 我司的基础库中也有一套自研的智能指针,和Android中的实现类似。之所以写这篇文章,是因为最近发现这里面隐藏多年的一个bug:特定场景下weak_ptr虽然能提...
本文主要介绍HaloOS通信中间件vbslite,代码版本tag_V1.0.0_20250721,运行在Ubuntu 20.04上。 1. 代码规范 2. 线程模型 3. 数据收发流程 4. 内存使用情况 4.1 拷贝次数 4.2 内存预分配 5. 总体观感 1. 代码规范 如果要打造一个良性的开源社区,方便大家协...
1. 背景 2. 功能开关 3. USAP进程生命周期 3.1 USAP进程创建流程 3.2 USAP进程实例化流程 3.3 USAP进程退出流程 4. 参考文档 本文主要介绍Android中的USAP(unspecialized app processes)机制。 注:本文内容基于android-14.0.0_r...
最近因为工作原因看了些Android AOSP的代码,在zygote相关代码中看到一个低级错误,比较惊讶,Android这么成熟的平台,也会犯这种错误? 2021年的时候,AOSP中合入了这个patch: 可以看到,这个patch中重复注册了JNI函数com_android_internal_os_Zygote_nativeAddUsapTableEntry: 这个Bug虽然不会造...
近期项目中遇到一个静态变量被double free导致的crash问题。 奇怪的是这个静态变量被构造了两次,但内存地址却是一样的。 最终查下来,是因为动态库libA.so、libB.so都链接了libCommon.a(包含全局变量kProblemSymbol),可执行程序同时依赖libA.so和libB.so,导致静态变量kProblemSymbol被double free。 接下来通...
elf文件中存在.data和.bss两个section,前者用来存储已经初始化的全局/静态变量,后者用来存储未初始化的全局/静态变量。所有的全局/静态变量都放在.data中不行吗?为何又引入了.bss呢? 接下来我们通过几个例子一探究竟。 1. 编译期行为 基准测试程序: #include <stdio.h> #include <stdint.h> int3...
在常规的面向对象语言中(比如C++),this指针的指向是确定的。但在JavaScript中,this指向依赖于运行环境。 下面的例子,预期的输出是nihao: class A { setEventListener(func) { this.callback = func; } triggerEvent() { this.call...
项目中遇到一个问题,某个进程已经通过prctl(PR_SET_DUMPABLE, 1)将其设置为dumpable,但还是无法生成coredump,其他进程能生成,说明系统配置没问题。最终查下来发现,是因为该进程变更uid/gid导致的。 下面用一个简化后的例子说明这个问题: 在系统中创建一个新用户test: sudo adduser test 执行命令...
capabilities将系统root权限按功能单元划分,使用者按需打开/关闭相关权限,比基于UID的权限控制方式更精细。 不过,Linux下的capabilities是线程相关的,同一个进程的不同线程可以具有不同的capabilities权限,使用不当,可能会造成权限泄露。 可以使用libpsx规避该问题,它的原理很简单,就是把当前进程中所有线程的capabilities设置一遍。 ...
本文主要介绍fork导致的死锁问题及其解决方法。 先看一个示例程序,该程序有个全局对象sGlobalInstance,父进程先通过该对象执行了lock操作,然后执行fork,在子进程中,也去执行lock操作。可以先看下这个程序有没有问题: #include <errno.h> #include <pthread.h> #include <stdio.h>...