自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(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关注的人

提示
确定要删除当前文章?
取消 删除