- 博客(32)
- 收藏
- 关注
原创 IFDS的icfg对异常的处理
IFDS的icfg对异常的处理:1) Normal语句抛出异常,例如数组访问。 a) Succs里有“$r8 :=@caughtexception;”语句。IFDS的processNormalFlow()会调用normal边的flowfunction进行data传播。于是data会传播到语句“$r8 := @caughtexception;”。2) Call语句抛出异常。
2017-12-27 18:21:22 1087
原创 Java资源泄露
1. 正常情况下的资源泄露 FileOutputStream fos = newFileOutputStream(new File("test.txt")); ... fos再也没有被关闭。2. 异常情况下的资源泄露 1) FileOutputStream fos = newFileOutputStream(new Fil
2017-12-26 11:10:05 3229
原创 eclipse插件开发
文章来源:http://www.vogella.com/tutorials/EclipsePlugin/article.html1. 使用eclipse for commiter来进行插件开发:https://www.eclipse.org/downloads/eclipse-packages/2. 使用一个eclipseIDE作为调试实例,称为runtime eclips
2017-12-25 09:37:30 256
原创 maven项目依赖本地jar文件
1. 在pom.xml添加依赖 com.company mylib 1.0 system ${project.basedir}/lib/mylib-1.0.jar2. 在项目的lib目录下放置jar文件:mylib-1.0.jar
2017-12-23 14:29:26 461
原创 JingS-9
控制流分析和依赖图依赖分析:用于指令调度,data cache优化。控制依赖: s1 d(c) s2,表示s2控制依赖于s1。数据依赖: s1在程序中先于s2。 s1 d(f) s2,flow依赖,也叫真依赖。 s1 d(a) s2,反依赖。
2017-12-22 22:26:37 196
原创 JingS-8
数据流分析1. 活跃分析:每个bit表示一个var的一次use。 in[n] = use[n] U (out[n] - def[n]) out[n] = U in[succ(n)] 后向数据流分析。 for all n, in[n] = empty. out[exit] = empty2. 到达定值:每个bit表示一个va
2017-12-22 20:56:29 246
原创 JingS-7
控制流分析发现基本块,构造dom-tree,发现loop(回边:head dom tail)。控制流分析方法 两种控制流分析方法: 发现基本块,构造流图。 1. 使用dominator发现循环。—— 对于迭代数据流分析,已经足够。 2. interval分析 -> structure分析 ->
2017-12-11 23:54:56 210
原创 JingS-3
符号表存储的类型、可见性、和生命周期 符号的属性和符号表的entry 一个符号有哪些属性: name: class: storage class volatile: 异步访问。符号不能进reg,每次都必须从mem读取值。 size:字节数
2017-12-10 19:10:37 166
原创 arch-5
Cachecache以block的方式组织 1. 直接映射:block可以存放在cache的唯一一个块上。 block地址 mod cache的块数 2. 全相连映射:block可以存放在cache的任何块上。 3. 组相连:block存在于cache的唯一的一个组中。
2017-12-09 16:03:49 279
原创 arch-3
指令级并行相关: 1. 数据相关:指令i、j。i写寄存器,j用到i产生的值。 2. 名字相关:指令i和j之间没有数据依赖,但是用到相同的寄存器。 反相关:i -> j,指令i读reg,j写reg。 输出相关:i -> j,指令i和j都写reg。 由于没有数据依赖,通过寄存
2017-12-09 12:27:16 329
原创 arch-2
指令集指令集分类 reg-mem系统结构:任何指令都可以访问mem。 reg-reg系统结构:又称为load-store系统结构,只能通过load/store指令访问mem。内存寻址 1. 内存地址表示:little endian(高位字节放在高地址)。big endian(高位字节放在低地址)。 2. 寻址模式:
2017-12-07 02:48:50 428
原创 JingS-5
运行时支持1. 基本的数据类型在运行时是如何表示的 编程语言有多个类型,这些类型在运行时表示和运算,由具体的机器指令来实现。 int:signed 32-bit。load/store char:一个字节、两个字节。 浮点:单精度、双精度、扩展精度。 枚举值: 数组: 记录:unpacked(各个field对齐
2017-12-06 02:24:14 190
原创 JS-0
符号表(ch3)使用stack、hash、linkedlist数据结构。5种中间表示(ch4)HIR:保有循环结构、循环的边界、数组下标。用来描述数据cache相关的优化。MIR:变量(a, v, ...)和编译器产生的临时变量(t1, t2)。LIR:符号寄存器(s1, s2, ...),用来描述全局寄存器优化。SSA:将符号寄存器版本化(s1-1, s1-2,
2017-12-06 01:57:21 233
原创 soot-2
Android runtime的verifier要求entermonitor - exitmonitor之间的代码全部放在catch-all region中。因此,soot会产生如下形式的代码: $r8 = $r0.; entermonitor $r8; label05: staticinvoke (1L);
2017-12-04 17:30:17 226
原创 soot-1
使用"-allow-phantom-refs"选项时,soot允许class和method没有定义。1. 找不到class的定义。class仅仅作为type。 soot处理:class仅作为type使用。2. 有class的定义,但其中某些method没有定义。——该方法为super class的方法,本class直接继承使用。 soot处理:getMethod()方法
2017-12-04 11:53:13 327
原创 shell编程-1
1. for循环list="1 2 3"for var in $list; do ...done使用seq命令产生序列for var in $(seq 1 $cnt); do ...done2. 函数函数定义foo(){ $* 所有参数 $1 $2 ... 具体
2017-11-10 09:49:12 168
原创 VS 2015链接错误:unresolved external symbol
错误信息:Error LNK2019unresolved external symbol __imp_UnDecorateSymbolName referenced in function "class llvm::StringRef __cdecl undname(char const *)"原因:使用Dbghelp.h中的函数UnDecorateSymbolName
2017-11-06 16:37:50 3616
原创 C++11类型转换
1. static_cast(var)将var的类型转换为type。 普通的强制类型转换,系统不会做任何检查。程序员保证类型转换的正确性。2. dynamic_cast(ptr)ptr必须是一个指针或地址。将ptr所指的类转换为type。ptr是一个基类的指针类型,type是衍生类。系统在执行时进行检查,如果类继承性关系存在,那么dynamic_cast(ptr)返回一个typ
2017-11-06 16:35:30 296
原创 std::unique_ptr和std::shared_ptr的用法
1. std::unique_ptr创建一个unique指针,放入容器(例如map),但是将实际指针返回,赋值到其他object.field。也就是所容器的元素负责对资源进行管理,而资源实际上被到处使用。容器本身是一个object A的field。也就是说,A自身消亡的时候,容器会自动释放所有资源。因此,std::unique_ptr起到一个管理内存资源的作用。实际的raw ptr
2017-11-06 09:35:14 3579
原创 C++编译的若干问题
1. 在A.h文件中实现一个class A的成员函数A::func{...}, 用到了class B。如果class B在A.h中仅仅只是声明 class B;,则编译器会报错:A::func{...; B b->foo(); ...} class B的定义找不到。 正确的做法是,将A::func() {...} 放在A.cpp中。2. class A; class A1 : A。
2017-10-27 17:18:58 192
原创 我看C++与Java
Java所有的对象在heap上分配,所有的变量都是引用(primitive type除外),所有的对象内存由GC管理。这样设计的结果就是:Java中的变量的赋值(包括method传参和返回值)、对象的copy,都非常简单。 C++的复杂性:1)C++的对象除了在heap上分配,还可以在stack和non-local scope上分配,导致对象赋值极其复杂。其引起的复杂性有:...
2017-10-24 16:25:30 171
原创 LLVM LTO与ThinLTO
参考网页:http://blog.llvm.org/2016/06/thinlto-scalable-and-incremental-lto.htmlLTO:在编译阶段生成bc字节码文件,link时将所有的bc文件合并成一个单一的模块,进行IPA和IPO,最后代码生成,产生可执行文件。ThinLTO:在编译阶段生成bc字节码文件(含有每个函数的summary),link
2017-10-19 15:32:19 2033
原创 Java xml编程
import org.dom4j.io.SAXReader;1. 解析xml文件FileInputStream fin = new FileInputStream("d:\\a.xml");SAXReader parser = new SAXReader();Document document = parser.read(fin);2. 读取xml中的元
2017-09-29 14:52:18 219
原创 java json编程-2
3.从文件(或字符串)构造JavaJson对象也就是解析Json文件(或Json字符串)。直接调用JavaJson的fromObject(String)即可。注意:如果Json字符串格式不对,解析时会抛出异常。(三) 读取JavaJson对象中的内容JSONObject有方法get(key),返回Object类型的值,然后需要根据value的实际类型进行显式的类型转换。
2017-09-28 17:27:57 286
原创 java json编程-1
(一) 背景JSON只有两种数据格式:1)map:key和value之间的映射,不同的key之间没有顺序。 { key1: value1, key2: value2, ....}2)array:多个element顺序排列。 [ element1, element2, ...](二) Java中的JSON对象(称为JavaJson)JavaJs
2017-09-28 15:51:31 282
原创 cntlm for linux 设置
1. 安装apt-get updateapt-get install cntlm2. 配置vi /etc/cntlm.confUsername testuserDomain contoso.comProxy 10.0.0.41:8080Listen 127.0.0.1:3128cnt
2017-09-27 10:51:31 745
原创 编译算法:SSA上的条件常数传播
背景: SSA有phi语句,有def-use边。CFG以每条语句(普通语句或phi语句)作为节点。算法思想:在CFG的流边上进行符号执行:从entry开始执行,记录每个变量的lattice值(初始值top,常数,非常数bottom)。处理完当前节点(语句),则将其后继节点放入流边的worklist。1. 符号执行:在处理分支节点时,如果能确定分支条件为常数值,则仅仅
2017-09-14 11:41:46 1370
原创 GPU异构编程模型
OpenCL编程模型: 数据并行模型。将数据进行划分。 任务并行。 OpenCL平台模型:host包含多个CD(计算设备),每个CD包含多个CU(计算单元),每个CU包含多个PE(处理元素)。对应到CUDA架构:CD就是GPU,CU是streaming多处理器,PE是streaming处理器。 OpenCL程序: host代码
2017-09-12 17:20:20 989
原创 Java匿名类
背景:接口是定义了未实现的方法的class。一般地,定义个一个class A,实现接口I。A实现I定义的所有方法。匿名类:不显式地定义class A。而是在需要用到A的时候,直接new I() { ... } 。在 {...} 中实现I的所有方法。匿名类无法引用,只能在创建的地方使用一次。匿名类经常使用在工厂方法中,用来创建某个对象(该对象实现某个接口I,即以I作为基类
2017-09-12 10:25:50 194
原创 排序算法总结
插入排序:1. 从数组的第二个元素开始,将其插入到已经有序的元素中。选择排序:1. 扫描数组,记录下最小的元素,将其与第一个元素交换。2. 重复1,只是交换元素后移。冒泡排序的思想:1. 从数组第一个数组元素开始,到数组末尾,如果当前元素比后记元素大,则交换。——确保最大的元素 “冒泡” 到数组末尾。2. 重复1,只是数组的长度减一(因为最后一个元素已经
2017-09-09 09:56:54 243
原创 大型查询系统
问题:一个大型查询系统,要处理千万级的查询。如何设计其缓存。1. 查询结果以链表的形式保存(头部为最新数据,尾部为老数据),同时每个节点也保存在hash表中,便于访问。2. 有多台机器负责处理查询,每台机器维护一部分缓存。一个查询进来后,分发到hash(query)%N机器上。
2017-09-09 09:04:24 289
原创 算法:在二叉树中寻找两个节点的共同祖先
问题:已知二叉树root和两个节点p和q,要求找出p和q在root中的最早的共同祖先。算法思想:中序访问二叉树,对于当前节点,当其左子树和右子树访问完毕,且p与q都已经访问过,则当前节点就是p与q的共同祖先。算法伪码:cnt = 0;commonAncestor = null;inorder(node){ if (node == nul
2017-09-07 10:45:34 3235
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人