C++智能指针的内存角度的分析
写这篇文章是由于有个同事问了一个问题,虽然智能指针在C++11中就已经支持了,但是一直都没怎么用所以原理有些不太清楚,这里正好学习记录一下理解shard_ptr,我们先看一个例子(这里都使用C++17编译)编译命令:g++ -std=c++1z shard_ptr.cpp#include<iostream> #include<pthread.h> #include<semaphore.h> #include<unistd.h> using namespace std; class Test{ public: int x; &nbs...May 12, 2019, 1:11 p.m.作者:zachary分类:C++阅读(634)评论(0)
kernel中信号量实现(二)
上一篇介绍了信号量可以使用waitqueue实现,这一篇主要讲waitqueue的实现,waitqueue故名思义就是等待队列。waitqueue在linux中的实现主要在下面文件中:include/linux/wait.h kernel/sched/wait.c一、先看数据结构struct __wait_queue_head { spinlock_t lock; ...Dec. 5, 2018, 2:55 a.m.作者:zachary分类:Linux相关阅读(714)评论(0)
kernel中信号量实现(一)
kernel中很多地方使用了信号量机制,一个典型的实现就是内存回收的触发,在内存进入慢速路径后的第一件事就是唤醒kswapd工作。信号量的使用很简单,总结起来有下面几点:1、初始化信号量。wait_queue_head_t _wait; //变量定义 init_waitqueue_head(&_wait); //变量初始化2、工作线程一般是一个死循环,工作结束后调用wait,等待触发线程唤醒,唤醒后处理wait事件。while(1) { DEFINE_WAIT(wait); //定义临时变量 prepare_to_wait(&pgdat->kswapd_wait, &wait, TASK_INTERRU...Nov. 27, 2018, 1 a.m.作者:zachary分类:Linux相关阅读(875)评论(0)
Malloc Debug
翻译至:https://android.googlesource.com/platform/bionic/+/master/libc/malloc_debug/README.mdMalloc Debug(内存调试)简介Malloc debug 是一种native层内存问题的方法。他可以帮助我们定位内存损坏、内存泄露、释放后再使用的问题。这个文档描述如何在Android N版本以后的Android系统中使用这个功能。对于老版本的malloc debug的方法见这个链接(https://android.googlesource.com/platform/bionic/+/master/libc/malloc_debug/README_marshmallow_and_earlier.md)。当malloc debug功能使能后,系统增加了一个Hook层代替正常的内存分配调用。这里主要替换了下面的...May 1, 2018, 2:41 p.m.作者:zachary分类:Android阅读(3101)评论(0)
matplotlib与panel结合的动态图
下面的例子显示了python动态图的做法,可以适用于其他图标,例如柱状图等。#encoding=utf8 import matplotlib import wx import numpy as np matplotlib.use('WXAgg') from matplotlib.backends.backend_wxagg import FigureCanvasWxAgg as FigureCanvas from matplotlib.figure import Figure import threading import time class CpuInfoWindow(wx.Frame)...Feb. 22, 2018, 8:39 p.m.作者:zachary分类:python小站阅读(733)评论(0)
HW Hackathon 作品
作品github地址:https://github.com/ShaoboFeng/huawei2017_hackathon作品视频:...Jan. 7, 2018, 2:08 p.m.作者:zachary分类:AI阅读(760)评论(0)
也来玩玩微信跳一跳小程序
安装iphone 自动化测试工具pip install facebook-wda安装libimobiledevicebrew install libimobiledevice安装WebDriverAgent确保已经安装Xcode开发工具brew install Carthagebrew install npmgit clone https://github.com/facebook/WebDriverAgent.git./Scripts/bootstrap.sh遇到问题参考https://testerhome.com/topics/7220实现截屏与点击屏幕c = wda.Client() s = c.session() def pull_screenshot(): &nb...Jan. 4, 2018, 12:32 a.m.作者:zachary分类:iOS阅读(830)评论(0)
Android 堆栈打印方法总结
framework层(java层)try { Log.i(TAG,"--------------NullPointerException-------begin"); throw new NullPointerException(); } catch (NullPointerException e1) { // TODO: handle exception Log.i(TAG, "-------------NullPointerException"); &nbs...Dec. 31, 2017, 4:16 p.m.作者:zachary分类:Android阅读(955)评论(2)
进程退出时,内存回收流程
在android优化中,有一个是技术是ZRAM,ZRAM是基于swap技术的,前几天同事问了个问题,linux内核中通过kswapd或是直接reclaim一个进程到zram中,如果这个进程被杀,那这个进程对应在ZRAM中的内存会不会先解压然后在free,这个问题以前只是知道不会解压的,具体的流程不是很清楚,用了两天时间搞了明白,现在先上图: 进程退出最终调用的是do_exit函数,然后通过一层层vma,pud,pmd,pte找到所有的page,对应page如果是在swap中的,通过swap_slot_free_notify回调调用swap设备中的notify方法,直接释放swap中的页,如果不是在swap中最终通过调用free_pages_and_swap_cache释放到buddy系统中,这里如果是0阶页通过free_hot_cold_p...July 29, 2017, 8:27 a.m.作者:zachary分类:Linux相关阅读(919)评论(0)
ZRAM实现原理详解
一、ZRAM的背景我们知道在不论是windows还是linux都有一个交换文件,这个交换文件是放在磁盘上的,对于手机设备也是可以这样做的,但是在移动设备中没有像PC机那样的磁盘,而是使用的是flash,Flash的读写寿命远不如磁盘,所以如果使用交换文件,将大大缩短Flash的寿命。为了不缩短Flash的寿命,程序员想了一个办法就是ZRAM,通过内存存放内存中的数据,只是将数据做了压缩,这样就可以用10M的内存存放20M的数据了,当然这只是一个比方,实际可能压缩的更小,这样同时也不会写入Flash进而影响Flash的寿命。 二、ZRAM的启用内核编译打开CONFIG_SWAP=y CONFIG_CGROUP_MEM_RES_CTLR=y CONFIG_CGROUP_MEM_RES_CTLR_SWAP=y CONFIG_ZRAM=yCONFIG_ZSMALLOC=y启用ZR...Feb. 26, 2017, 10:05 p.m.作者:zachary分类:Android阅读(3321)评论(0)