- 博客(44)
- 资源 (8)
- 收藏
- 关注
原创 C/C++系列——函数声明全解析
一. 函数是什么函数,从代码层面(逻辑上)来讲,就是一个功能模块,集成了若干程序语句;从运行时(硬件物理上)来讲,就包括了一个内存代码块和一个内存堆栈。程序员所实现的每个程序系统中往往包含了大量的函数,各个函数之间存在着直接或者间接的调用关系。我们知道,要想调用一个函数,就需要知道一个函数的声明情况(包括,函数名,返回类型,调用参数等),从系统层看,就需要知道函数的入口地址。给一个函数分配入口
2016-11-29 22:26:27
925
原创 Java系列——abstract, interface比较分析
1. 在abstract class方式中,Demo可以有自己的数据成员,也可以有非abstarct的成员方法; 而在interface方式的实现中,Demo只能够有静态的不能被修改的数据成员(也就是必须是static final的,不过在interface中一般不定义数据成员),所有的成员方法都是abstract的。从某种意义上说,interface是一种特殊形式的abstract clas
2016-09-09 10:42:56
545
原创 智能手机内外存可靠性研究
一. 研究目的Android手机目前还是会存在卡顿现象,该研究的目的是要从内核层的内存管理、外存管理,框架层的虚拟机垃圾回收、显存管理等方面找出卡顿的原因所在。对于内核层的内存管理,又细分为了三个研究方向:内存碎片化带来的影响,low memory killer(lmk)带来的影响以及交换分区带来的影响。对于框架层的垃圾回收,也细分为两个方向:传统Dalvik虚拟机垃圾回收所存在的问题,最新的
2016-09-01 17:23:50
940
原创 新型非易失性存储器作为交换分区的研究(能耗与性能的提升)
一. 动机1. 移动应用功能越来越强大,占用内存越来越大,功耗越来越高。同时由于Android进程管理的特性:将打开的进程缓存在后台,进程的数据包括代码,运行时数据,打开的文件缓存等统统驻留在内存。这就导致随着手机系统的使用,内存会越来越不够用。特别是对内存偏小的手机,内存不够用的情形会出现的更早,更频繁。2. 所以我们可以采用增加交换分区的方式来扩充内存容量。但是传统的交换分区会在某个时
2016-08-31 20:05:58
1015
原创 C++系列——指针和数组详细分析
1. 指针和数组在编译阶段的区别指针:编译器符号指向的是指针变量的地址值,所以还要先得到指针变量所存放的地址值,然后根据该地址值取引用其所指向的对象内容,也就是间接引用其所值对象的值。数组:编译器符号指向的是数组的首个元素的地址,通过下标直接计算元素偏移量,从而直接得到元素的值。2. 指针和数组作为函数参数的区别一维数组和多维数组一维数组作为函数形参:形式:
2016-08-16 12:03:29
721
原创 C++系列——sizeof, strlen
一. sizeof的含义以及用法作用:返回一个对象(普通对象或类型实例化)或类型名(结构体或类类型名)的长度(占用内存的大小)。返回值类型为size_t,单位为字节。语法形式:sizeof (type name);sizeof (expr);sizeof expr;使用sizeof的结果会依赖于expr的类型:对普通对象,会返回其所占用的内存大小,比如32位机器
2016-08-12 15:29:39
571
原创 C++系列——重载(overload),重写(override),重定义(redefine)
1. 重载(overload)定义:出现在相同作用域中的两个函数,如果具有相同的名字而形参不同,则称为重载函数。返回值可以不同应用场景:2. 重写(override,一般也叫做覆盖)定义:出现在基类和派生类中,派生类重定义了基类中的virtual函数。返回值要相同,或者是协变应用场景:3. 重定义(redefine,一般也叫做隐藏,hide)
2016-08-08 17:59:32
948
原创 C++系列——const,引用,指针用法小结
1. const将变量设置为只读,任何对其进行的写操作(如赋值),都会导致编译错误。2. 引用引用(复合类型)就是对象的另外一个名字。关于定义引用几点要求:a. 定义引用的时候,必须初始化(指定引用指向对象的唯一方法)。非法情况:int &ref;b. 初始化引用的时候,必须是一个其他类型的对象。非法情况:int &ref=10;c. 正确形式:int
2016-08-04 08:29:28
572
原创 Android系统实现用户态swap(研究贴)
一. Android下用户态swap的意义二. Android下用户态swap的实现方法1. 首先实现系统调用swap_process(在Andriod的内核层实现系统调用,可以参考我前面的文章。)2. $kernel/mm/swap_state.c定义系统调用函数swap_process,参数为pid(用户层传过来的进程id)/** * swap inactive pa
2016-07-18 16:43:59
1272
原创 Android平台cocos2d-x学习之——平台搭建
一. 系统概览操作系统:Fedora 19开发IDE:Eclipse with ADT二. 搭建过程1. 下载稳定的cocos2d-x代码我下载的是3.11版本。2. 安装依赖库文件由于我的系统不是Ubuntu,所以需要手动地安装依赖库文件。就我的系统而言,需要安装的库文件包括:(具体可以参考build目录下的install-deps-linux.s
2016-05-17 23:34:49
676
原创 Android平台cocos2d-x 学习揭幕 (2016-05-11开始啦。。。)
一. 为什么要学习cocos2d-x由于自己对Android系统的酷爱与了解,同时结合自己的一些调研与总结。个人决定要探索一番该平台上还没有涉足过的领域,并在短时间内从入门到精通。(能不能精通就看这两个月了,哈哈哈,加油,不要让自己两个月后(2016-07-11)后悔!)二. 学习目标利用cocos2d-x,在两个月内开发出一款自己的Android游戏。三. 学习
2016-05-11 15:55:57
443
原创 Android系统进程之Activity管理——ActivityManagerService(AMS)
一. 为什么会有AMS对于Android app开发人员来说,Activity是其打交道最多的组件了:App的每一个界面都对应于一个Activity。每个Activity都有他的生命周期(那几个生命周期应该已经烂熟于心了吧),所以我们应该有一种机制来记录并管理这些Activity的状态信息,从而根据这些信息,来对App的内存进行分配回收等管理操作。综上,掌握好AMS的工作原理,可以较好地理解A
2016-04-06 11:55:04
1700
原创 Android进程/线程管理——深入源码解读+分析
一. 为什么要了解进程/线程二 . 进程三. 线程四. Handler,MessageQueue,Runnable,Looper
2016-03-26 17:48:48
612
原创 Android如何进行进程间通信之——Binder
一. 为什么会有Binder首先我们来看一句话:Binder是Android中使用最广泛的IPC(进程间调用)机制。所以说白了,Binder的存在是为了Android系统中的跨进程函数(包括服务等)调用。这是操作系统的基本功能之一。在Android系统中的具体表现形式就是应用进程与系统服务进程之间的交互,或者是用户进程与用户进程之间的交互,又或者是系统进程与系统进程之间的交互。例如Activi
2016-03-22 11:41:13
1136
原创 对Trie单词树的实现与思考
一. 为什么要使用Trie树Trie树可以将大量字符串通过树形结构组织起来,前缀相同的字符串共享存储空间,从而达到1)节约存储空间,2)加快特定查找速度(例如,以给定字符串开头的字符串的个数等)。二. C实现Trie树Trie树的建立void create_tree(struct Node* T, char dir[]){ int jc=1; //root节点已经在main函数中
2016-03-15 22:29:21
544
原创 一个例子看懂递归
一、为什么要搞定递归在计算机科学与技术中,递归思想是简单而且复杂的。它可以将复杂的数学问题用简单的代码实现,但是要理解它却是需要复杂的思考。大多数算法中都巧妙的使用了,或者可以使用递归来完成,比如排序算法中的快速排序、堆排序、归并排序等,数据结构中树的遍历、平衡树的判断、二叉查找树的建立与维护以及图的遍历与最短路径求解等,动态规划、贪心算法等等,实在事太多太多,就不一一列举了。所以掌握好递归对
2016-03-08 22:00:12
1940
原创 检测链表环路引发的思考
一个小小的数学游戏引发的奇妙思路之旅!如题:请在O(n)时间复杂度内找出链表(存在环路)中环路的起点。解答:设定双(快慢)指针,慢指针每次向后移动一个元素,快指针每次向后移动两个元素。两指针依次向后遍历,直到相遇。相遇时,将慢指针指向头节点,将快指针设置为慢指针,继续向后遍历,直到相遇。相遇节点即为环路的起始节点。思考:实际上,巧妙地运用了速度为两倍的追赶相遇问题:他们会在前者的对称位
2016-03-07 11:32:33
513
原创 树莓派(Raspberry pi)下安装七牛云c/c++ SDK时遇到的问题及解决方案
问题1:linux下编译c代码时,出现缺少curl/curl.h文件的错误。但是明明curl就已经安装了,怎么会这样子,而且/usr/include/目录下确实没有curl库文件目录。问题就来了,怎么破?解决:当然是安装对应的curl库文件啦。在我的平台(Raspberry pi)上是这个库文件是libcurl4-openssl-dev。对应的安装命令是sudo apt-get insta
2015-12-04 21:47:39
2281
原创 一次修复磁盘的记录 (ext4 mount: wrong fs type, bad option, bad superblock)
$ sudo e2fsck -f /dev/sdb1e2fsck 1.41.4 (27-Jan-2009)e2fsck: Attempt to read block from filesystem resulted in short read while trying to open /dev/sdb1Could this be a zero-length partition?
2015-10-30 21:30:02
8118
2
原创 算法中的一些符号 O(big-Oh) Ω(big-theta) Θ(big-theta)
O(big-Oh) Ω(big-theta) Θ(big-theta)一、概述这是我们在算法的时间复杂度分析中经常会碰到的几个符号。符号后面括号里的是他们相应的读法。简单来说,第一个符号的意义相当于“小于等于”;第二个符号的意义相当于“大于等于”;第三个符号的意义相当于“等于”。其实还有一个o(little-oh),它的意义相当于“小于”,这里不做讨论。后面的讨论中都用比较通俗
2015-10-30 21:15:01
21035
1
原创 Linux系统C语言读写文件总结 (二)
1. 概述这里所说的是标准I/O库。这里所说标准,是因为接下来介绍的I/O函数由ISO C标准说明并在诸多操作系统上都进行了实现,包括UNIX like OS, Linux, Mac, Windows等。标准I/O库处理了很多细节,例如缓冲区分配,以优化长度执行I/O等。这些处理使得用户不必担心如何使用正确的块长度。标准I/O库实际上就是在我在上一片博客中所将的基本I/O操作函数的一个封装
2015-10-21 21:44:28
2195
原创 Linux系统C语言读写文件总结 (一)
1. 概述一般来说,linux系统中对文件的读写操作只需要几个基本函数就可以搞定,包括open, read, write, lseek以及close等函数。这里所说的函数就是所谓的不带缓冲的I/O。这里不带缓冲指的是这些个函数(read, write等)都对应与系统内核的一个系统调用。它们也不是ISO C的组成部分,但是,它们是POSIX.1和Single UNIX Specification
2015-10-21 17:38:20
2642
原创 [回顾] 如何在Nexus 5(Android 4.4.4)上开启交换分区swap
1. 编译内核(kernel)开启swap需要内核支持,所以第一步需要得到支持swap特性的内核镜像文件。a. 下载Android系统对应内核源代码;b. make menuconfig -> 开启 Support for paging of anonymous memory (swap)选项c. 编译(需要相应编译环境,具体请参考google 官网)2. 通过aboo
2015-10-12 16:35:20
2318
原创 Linux脚本备忘
1. 每隔一秒记录free命令的输出中swap分区还剩余的存储空间while [[ 1 ]]do free | grep Swap | awk '{print $3}' >> $1 sleep 1done引申:重点主要是awk命令。简单来说awk就是把文件逐行地读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。使用方法:awk '{pattern +
2015-07-20 22:52:30
529
原创 dumpsys meminfo 说明
PSS: PSS differs from RSS in that it reports the proportional size of its shared libraries, i.e. if three processes all use a shared library that has 30 pages, that library will only contribut
2015-06-24 10:19:47
3090
原创 如何通过InstallShield打包应用程序
有视频教程为什么不看呢http://resources.flexerasoftware.com/web/demos/IS2010_VSLE_Demo/IS2010_VSLE_Demo-lite.html
2015-06-12 22:29:08
577
原创 如何在Android4.4(内核3.4.0)上使用zram
问题:要使用zram需要内核支持,所以我们需要加入ZRAM的内核编译选项。但是它依赖于ZSMALLOC。在3.4.0内核版本中ZSMALLOC又依赖于x86架构,但是我们的手机又是arm架构。问题就来了!解决方法:很简单,去该手机对应高版本的内核中找到zsmalloc对应的模块替换当前版本中的部分。实验配置:平台:Nexus 5内核版本:3.4.0Andro
2015-02-03 11:36:32
3721
原创 如何在Android平台上使用IO分析工具(blktrace)
1. In order to use blktrace, the kernel has to be compiled with block tracing supportkernel hacking => tracer => enabling IO tracerCONFIG_BLKDEV_IO_TRACEI also enabled a few other tracing option
2014-11-06 22:35:04
2210
原创 解压并重新打包 initrd.img
Extractgunzip Repackfind ./ | cpio -H newc -o > initrd.cpiogzip initrd.cpiomv initrd.cpio.gz initrd.img
2014-09-23 20:22:47
3093
原创 如何在Linux系统下将Android的系统镜像system.img拆包,打包
1. 拆包mkdir syssimg2img system.img sys.rawsudo mount -t ext4 -o loop sys.raw sys/
2014-09-09 22:44:16
1316
MIT Press - Introduction To Algorithms, 2nd Edition
2012-05-05
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人