什么人一年只工作一天脑筋急转弯| 狗狗为什么喜欢舔人| kp是什么意思| 井代表什么生肖| 头发一半白一半黑是什么原因| 胃食管反流能吃什么水果| 肚子疼吃什么药管用| 滋阴潜阳是什么意思| 紫丁香什么时候开花| 鱼是什么意思| 心律不齐吃什么药最快| 氨基酸的作用是什么| 鱼加思读什么| 什么是孢子| 今年农历是什么年| 壁虎的尾巴有什么用| 今天突然拉稀拉出血什么原因| 乐不思蜀什么意思| 素饺子什么馅儿的好吃| 9月24日什么星座| 眼睛红用什么眼药水| 入木三分是什么意思| 有趣的什么填空| 水泻拉肚子是什么原因| 工事是什么意思| 阴囊潮湿是什么原因| 痱子长什么样子图片| 血小板体积偏低是什么原因| 什么神什么注| 蜂蜜不能和什么食物一起吃| 酒蒙子是什么意思| 潘粤明老婆现任叫什么| 胃不舒服做什么检查| 梦见小男孩是什么预兆| 2月16日是什么星座| 梦见床代表什么预兆| 黑舌头的狗是什么狗| 规格是什么意思| 月经推迟一个月不来什么原因| 喝黑苦荞茶有什么好处和坏处| 康复治疗技术是什么| 亦字五行属什么| hsv是什么病毒| 老是打饱嗝是什么原因| 孕妇吃什么鱼最好| 热射病是什么原因引起的| 卵巢黄体是什么意思| 乳癖是什么病| 沉香有什么作用| 一什么不什么| 肉丝炒什么好吃| 牙齿一碰就疼是什么原因| 食蚁兽是什么动物| 眼角痛什么原因| 胃酸过多吃什么食物好| 穿刺是什么手术| 羊水偏多是什么原因| 小儿磨牙是什么原因引起的| 1969年属鸡是什么命| 狗狗假孕是什么症状| 规培证有什么用| 孕早期生气对胎儿有什么影响| 榨菜是什么菜做的| 100聚酯纤维是什么面料| 脖子痛是什么原因| 小便有点黄是什么原因| 什么鬼大家都喜欢| 狗为什么吃屎| 芋头是什么季节的| 细菌性肺炎吃什么药| 九浅一深什么意思| 芥菜是什么菜| 香蕉与什么食物相克| 什么是abo| zoom什么意思| 左侧肋骨下面是什么器官| 泌尿科主要检查什么| 脚底板发红是什么原因| 身上红痣多是什么原因| 陈醋和香醋有什么区别| 四川有什么山| 什么什么归赵| 腊月二十三是什么星座| 跑路什么意思| 78岁属什么| 这什么意思| 多心是什么意思| 什么的春天| 复刻是什么意思| 阴道干涩吃什么药| 雷锋属什么生肖| 男占258女占369什么意思| 贝塔是什么意思| 癫痫是什么症状| 腿胖是什么原因引起的| 金属过敏用什么药膏| 大腿抽筋是什么原因引起的| sp是什么的缩写| 蓟类植物是什么| 素鸡是什么| 雷是什么生肖| 翻糖蛋糕是什么意思| 人为什么会有狐臭| 壬水代表什么| 肋下未及是什么意思| 肾炎吃什么好| 黑天天的学名叫什么| 画肖指什么生肖| 打胎药叫什么| 生化妊娠是什么意思| 尿毒症前兆是什么症状表现| 什么是逻辑思维| 垮掉是什么意思| 黄瓜可以和什么一起榨汁| kdj是什么意思| 永加一个日念什么| 脾胃虚弱吃什么好| 颅压高吃什么药| 眼白发黄是什么原因| 耳聋是什么原因引起的| 中图分类号是什么| 梦见麒麟是什么兆头| 投诉与举报有什么区别| 补铁吃什么食物好| 继承衣钵是什么意思| hpv亚型是什么意思| 6月12是什么星座| 脾肾阳虚吃什么中成药| 代价是什么意思| 葫芦代表什么生肖| 什么叫早泄| 为什么子宫会隐隐作痛| 天天做梦是什么原因| 梦到下雪是什么意思| 尿葡萄糖是什么意思| 什么原因引起痛风| 经常流鼻血是什么原因| 5月6号是什么星座| 8.14是什么星座| 戌是什么意思| 脚底烧热是什么原因| 后背疼是什么病| 什么叫老人临终骨折| 补脑吃什么食物| 桑榆未晚是什么意思| 癫狂是什么意思| 吃什么补气血效果最好| 彩虹代表什么生肖| 277是什么意思| 脚背有痣代表什么| 四十不惑是什么意思| 精神支柱是什么意思| 金樱子泡酒有什么功效| 皮肤为什么会变黑| 国资委主任是什么级别| 女性分泌物发黄是什么原因| 过氧化氢弱阳性什么意思| 蔷薇是什么意思| 奄奄一息的息是什么意思| 给孩子测骨龄应该挂什么科| 上海有什么好玩的地方旅游景点| 手足是什么意思| 入职是什么意思| 贫血是什么引起的| 飓风什么意思| 阿托伐他汀钙片治什么病| 什么是末法时代| 考拉吃什么食物| 狗狗肠胃炎吃什么药| 蜗牛吃什么| york是什么牌子| 女性睾酮低说明什么| 盗墓笔记它到底是什么| 七月份可以种什么菜| 吃中药忌口都忌什么| 四维彩超是检查什么| 润滑油是干什么用的| 什么是音节什么是音序| maby什么意思| 云服务是什么| 感冒了吃什么水果比较好| 后嗣是什么意思| 什么花在什么时间开| 嗜酸性肉芽肿是什么病| 开塞露擦脸有什么效果| 走路腰疼是什么原因| 头发不干就睡觉有什么危害| 深入交流是什么意思| 为什么长痣越来越多了| 白细胞低吃什么好| 肺结节有什么症状| 做饼用什么面粉| 斐字五行属什么| 怀孕喝酒会有什么反应| 耳鸣是什么原因造成的| 雅戈尔男装什么档次| 腿脚肿胀是什么原因引起的| 业力重是什么意思| 什么药吃了会产生幻觉| 五路财神都叫什么名字| 三月五号是什么星座| 精油是干什么用的| 六月十一是什么日子| 氯雷他定片是治什么的| 男怕穿靴女怕戴帽什么意思| 尿路感染 吃什么| 坐疮是什么样的图片| 手上长毛是什么原因| 四季不安痣是什么意思| 嘴唇肿起来一般是什么原因引起的| 蟹黄是螃蟹的什么东西| 落地签是什么意思| 金童玉女指什么生肖| 为什么针灸后越来越痛| 伤口感染用什么药| 前列腺钙化是什么病| 艺人是什么意思| 儿童鸡胸挂什么科| 劳您费心了什么意思| 月经不调吃什么药| 高危行为是什么意思| 尿有味是什么原因| 眼睛浮肿是什么原因| 四月八日是什么星座| 造影是什么| 9.21是什么星座| 吃了避孕药有什么副作用| 民警是干什么的| 什么是着相| asmr是什么| 假花放在家里有什么忌讳| 甘油三酯高吃什么药好| 什么减肥药最管用| 什么是酸性土壤| 鸭子烧什么好吃| 城字五行属什么| 香港说什么语言| 乳腺增生结节吃什么药效果好| 排斥一个人什么意思| 肚子疼应该吃什么药| 超七水晶是什么| 自言自语是什么原因导致| 白鱼又叫什么鱼| 戴珍珠手链有什么好处| 退位让贤是什么意思| 什么水果是碱性的| 吃洋葱有什么好处和坏处| 食禄痣是什么意思| 反酸是什么意思| 脚腿肿是什么原因引起的| 入木三分是什么意思| 氯低是什么原因| 大姨妈来能吃什么水果| 容易放屁是什么原因| 10岁属什么| 体能是什么| 布鲁斯是什么意思| 为什么会得甲减| 绿色痰是什么原因| 包皮脱皮是什么原因| 春占生女是什么意思| 核磁共振和ct有什么区别| 贫血吃什么可以补血| 尿酸高吃什么药效果好| 百度Jump to content

农历11月11日是什么星座

From Wikipedia, the free encyclopedia
百度 在宣讲种植技术过程中,她将国家相关政策带到群众中去,并根据群众需求,积极联络各级妇联、民政、农委等部门帮助群众解决切身利益问题,让困难群体真正享受到党的好政策。

Data-flow analysis is a technique for gathering information about the possible set of values calculated at various points in a computer program. It forms the foundation for a wide variety of compiler optimizations and program verification techniques. A program's control-flow graph (CFG) is used to determine those parts of a program to which a particular value assigned to a variable might propagate. The information gathered is often used by compilers when optimizing a program. A canonical example of a data-flow analysis is reaching definitions. Other commonly used data-flow analyses include live variable analysis, available expressions, constant propagation, and very busy expressions, each serving a distinct purpose in compiler optimization passes.

A simple way to perform data-flow analysis of programs is to set up data-flow equations for each node of the control-flow graph and solve them by repeatedly calculating the output from the input locally at each node until the whole system stabilizes, i.e., it reaches a fixpoint. The efficiency and precision of this process are significantly influenced by the design of the data-flow framework, including the direction of analysis (forward or backward), the domain of values, and the join operation used to merge information from multiple control paths.This general approach, also known as Kildall's method, was developed by Gary Kildall while teaching at the Naval Postgraduate School.[1][2][3][4][5][6][7][8]

Basic principles

[edit]

Data-flow analysis is the process of collecting information about the way the variables are defined and used in the program. It attempts to obtain particular information at each point in a procedure. Usually, it is enough to obtain this information at the boundaries of basic blocks, since from that it is easy to compute the information at points in the basic block. In forward flow analysis, the exit state of a block is a function of the block's entry state. This function is the composition of the effects of the statements in the block. The entry state of a block is a function of the exit states of its predecessors. This yields a set of data-flow equations:

For each block b:

In this, is the transfer function of the block . It works on the entry state , yielding the exit state . The join operation combines the exit states of the predecessors of , yielding the entry state of .

After solving this set of equations, the entry and/or exit states of the blocks can be used to derive properties of the program at the block boundaries. The transfer function of each statement separately can be applied to get information at a point inside a basic block.

Each particular type of data-flow analysis has its own specific transfer function and join operation. Some data-flow problems require backward flow analysis. This follows the same plan, except that the transfer function is applied to the exit state yielding the entry state, and the join operation works on the entry states of the successors to yield the exit state.

The entry point (in forward flow) plays an important role: Since it has no predecessors, its entry state is well defined at the start of the analysis. For instance, the set of local variables with known values is empty. If the control-flow graph does not contain cycles (there were no explicit or implicit loops in the procedure) solving the equations is straightforward. The control-flow graph can then be topologically sorted; running in the order of this sort, the entry states can be computed at the start of each block, since all predecessors of that block have already been processed, so their exit states are available. If the control-flow graph does contain cycles, a more advanced algorithm is required.

An iterative algorithm

[edit]

The most common way of solving the data-flow equations is by using an iterative algorithm. It starts with an approximation of the in-state of each block. The out-states are then computed by applying the transfer functions on the in-states. From these, the in-states are updated by applying the join operations. The latter two steps are repeated until we reach the so-called fixpoint: the situation in which the in-states (and the out-states in consequence) do not change.

A basic algorithm for solving data-flow equations is the round-robin iterative algorithm:

for i ← 1 to N
initialize node i
while (sets are still changing)
for i ← 1 to N
recompute sets at node i

Convergence

[edit]

To be usable, the iterative approach should actually reach a fixpoint. This can be guaranteed by imposing constraints on the combination of the value domain of the states, the transfer functions and the join operation.

The value domain should be a partial order with finite height (i.e., there are no infinite ascending chains < < ...). The combination of the transfer function and the join operation should be monotonic with respect to this partial order. Monotonicity ensures that on each iteration the value will either stay the same or will grow larger, while finite height ensures that it cannot grow indefinitely. Thus we will ultimately reach a situation where T(x) = x for all x, which is the fixpoint.

The work list approach

[edit]

It is easy to improve on the algorithm above by noticing that the in-state of a block will not change if the out-states of its predecessors don't change. Therefore, we introduce a work list: a list of blocks that still need to be processed. Whenever the out-state of a block changes, we add its successors to the work list. In each iteration, a block is removed from the work list. Its out-state is computed. If the out-state changed, the block's successors are added to the work list. For efficiency, a block should not be in the work list more than once.

The algorithm is started by putting information-generating blocks in the work list. It terminates when the work list is empty.

Ordering

[edit]

The efficiency of iteratively solving data-flow equations is influenced by the order at which local nodes are visited.[9] Furthermore, it depends on whether the data-flow equations are used for forward or backward data-flow analysis over the CFG. Intuitively, in a forward flow problem, it would be fastest if all predecessors of a block have been processed before the block itself, since then the iteration will use the latest information. In the absence of loops it is possible to order the blocks in such a way that the correct out-states are computed by processing each block only once.

In the following, a few iteration orders for solving data-flow equations are discussed (a related concept to iteration order of a CFG is tree traversal of a tree).

  • Random order - This iteration order is not aware whether the data-flow equations solve a forward or backward data-flow problem. Therefore, the performance is relatively poor compared to specialized iteration orders.
  • Postorder - This is a typical iteration order for backward data-flow problems. In postorder iteration, a node is visited after all its successor nodes have been visited. Typically, the postorder iteration is implemented with the depth-first strategy.
  • Reverse postorder - This is a typical iteration order for forward data-flow problems. In reverse-postorder iteration, a node is visited before any of its successor nodes has been visited, except when the successor is reached by a back edge. (Note that reverse postorder is not the same as preorder.)

Initialization

[edit]

The initial value of the in-states is important to obtain correct and accurate results. If the results are used for compiler optimizations, they should provide conservative information, i.e. when applying the information, the program should not change semantics. The iteration of the fixpoint algorithm will take the values in the direction of the maximum element. Initializing all blocks with the maximum element is therefore not useful. At least one block starts in a state with a value less than the maximum. The details depend on the data-flow problem. If the minimum element represents totally conservative information, the results can be used safely even during the data-flow iteration. If it represents the most accurate information, fixpoint should be reached before the results can be applied.

Examples

[edit]

The following are examples of properties of computer programs that can be calculated by data-flow analysis. Note that the properties calculated by data-flow analysis are typically only approximations of the real properties. This is because data-flow analysis operates on the syntactical structure of the CFG without simulating the exact control flow of the program. However, to be still useful in practice, a data-flow analysis algorithm is typically designed to calculate an upper respectively lower approximation of the real program properties.

Forward analysis

[edit]

The reaching definition analysis calculates for each program point the set of definitions that may potentially reach this program point.

  if b == 4 then
     a = 5;
  else 
     a = 3;
  endif
 
  if a < 4 then
     ...

The reaching definition of variable a at line 7 is the set of assignments a = 5 at line 2 and a = 3 at line 4.

Backward analysis

[edit]

The live variable analysis calculates for each program point the variables that may be potentially read afterwards before their next write update. The result is typically used by dead code elimination to remove statements that assign to a variable whose value is not used afterwards.

The in-state of a block is the set of variables that are live at the start of it. It initially contains all variables live (contained) in the block, before the transfer function is applied and the actual contained values are computed. The transfer function of a statement is applied by killing the variables that are written within this block (remove them from the set of live variables). The out-state of a block is the set of variables that are live at the end of the block and is computed by the union of the block's successors' in-states.

Initial code:

Backward analysis:

The in-state of b3 only contains b and d, since c has been written. The out-state of b1 is the union of the in-states of b2 and b3. The definition of c in b2 can be removed, since c is not live immediately after the statement.

Solving the data-flow equations starts with initializing all in-states and out-states to the empty set. The work list is initialized by inserting the exit point (b3) in the work list (typical for backward flow). Its computed in-state differs from the previous one, so its predecessors b1 and b2 are inserted and the process continues. The progress is summarized in the table below.

processing out-state old in-state new in-state work list
b3 {} {} {b,d} (b1,b2)
b1 {b,d} {} {} (b2)
b2 {b,d} {} {a,b} (b1)
b1 {a,b,d} {} {} ()

Note that b1 was entered in the list before b2, which forced processing b1 twice (b1 was re-entered as predecessor of b2). Inserting b2 before b1 would have allowed earlier completion.

Initializing with the empty set is an optimistic initialization: all variables start out as dead. Note that the out-states cannot shrink from one iteration to the next, although the out-state can be smaller than the in-state. This can be seen from the fact that after the first iteration the out-state can only change by a change of the in-state. Since the in-state starts as the empty set, it can only grow in further iterations.

Other approaches

[edit]

Several modern compilers use static single-assignment form as the method for analysis of variable dependencies.[10]

In 2002, Markus Mohnen described a new method of data-flow analysis that does not require the explicit construction of a data-flow graph,[11] instead relying on abstract interpretation of the program and keeping a working set of program counters. At each conditional branch, both targets are added to the working set. Each path is followed for as many instructions as possible (until end of program or until it has looped with no changes), and then removed from the set and the next program counter retrieved.

A combination of control flow analysis and data flow analysis has shown to be useful and complementary in identifying cohesive source code regions implementing functionalities of a system (e.g., features, requirements or use cases).[12]

Special classes of problems

[edit]

There are a variety of special classes of dataflow problems which have efficient or general solutions.

Bit vector problems

[edit]

The examples above are problems in which the data-flow value is a set, e.g. the set of reaching definitions (Using a bit for a definition position in the program), or the set of live variables. These sets can be represented efficiently as bit vectors, in which each bit represents set membership of one particular element. Using this representation, the join and transfer functions can be implemented as bitwise logical operations. The join operation is typically union or intersection, implemented by bitwise logical or and logical and. The transfer function for each block can be decomposed in so-called gen and kill sets.

As an example, in live-variable analysis, the join operation is union. The kill set is the set of variables that are written in a block, whereas the gen set is the set of variables that are read without being written first. The data-flow equations become

In logical operations, this reads as

out(b) = 0
for s in succ(b)
    out(b) = out(b) or in(s)
in(b) = (out(b) and not kill(b)) or gen(b)

Dataflow problems which have sets of data-flow values which can be represented as bit vectors are called bit vector problems, gen-kill problems, or locally separable problems.[13] Such problems have generic polynomial-time solutions.[14]

In addition to the reaching definitions and live variables problems mentioned above, the following problems are instances of bitvector problems:[14]

IFDS problems

[edit]

Interprocedural, finite, distributive, subset problems or IFDS problems are another class of problem with a generic polynomial-time solution.[13][15] Solutions to these problems provide context-sensitive and flow-sensitive dataflow analyses.

There are several implementations of IFDS-based dataflow analyses for popular programming languages, e.g. in the Soot[16] and WALA[17] frameworks for Java analysis.

Every bitvector problem is also an IFDS problem, but there are several significant IFDS problems that are not bitvector problems, including truly-live variables and possibly-uninitialized variables.

Sensitivities

[edit]

Data-flow analysis is typically path-insensitive, though it is possible to define data-flow equations that yield a path-sensitive analysis.

  • A flow-sensitive analysis takes into account the order of statements in a program. For example, a flow-insensitive pointer alias analysis may determine "variables x and y may refer to the same location", while a flow-sensitive analysis may determine "after statement 20, variables x and y may refer to the same location".
  • A path-sensitive analysis computes different pieces of analysis information dependent on the predicates at conditional branch instructions. For instance, if a branch contains a condition x>0, then on the fall-through path, the analysis would assume that x<=0 and on the target of the branch it would assume that indeed x>0 holds.
  • A context-sensitive analysis is an interprocedural analysis that considers the calling context when analyzing the target of a function call. In particular, using context information one can jump back to the original call site, whereas without that information, the analysis information has to be propagated back to all possible call sites, potentially losing precision.

List of data-flow analyses

[edit]

See also

[edit]

References

[edit]
  1. ^ Kildall, Gary Arlen (May 1972). Global expression optimization during compilation (Ph.D. dissertation). Seattle, Washington, USA: University of Washington, Computer Science Group. Thesis No. 20506, Technical Report No. 72-06-02.
  2. ^ Kildall, Gary Arlen (2025-08-06). "A unified approach to global program optimization" (PDF). Proceedings of the 1st annual ACM SIGACT-SIGPLAN symposium on Principles of programming languages - POPL '73. pp. 194–206. doi:10.1145/512927.512945. hdl:10945/42162. S2CID 10219496. Archived (PDF) from the original on 2025-08-06. Retrieved 2025-08-06. ([1])
  3. ^ Rüthing, Oliver; Knoop, Jens; Steffen, Bernhard (2025-08-06) [1999]. "Optimization: Detecting Equalities of Variables, Combining Efficiency with Precision". In Cortesi, Agostino; Filé, Gilberto (eds.). Static Analysis: 6th International Symposium, SAS'99, Venice, Italy, September 22–24, 1999, Proceedings. Lecture Notes in Computer Science. Vol. 1694 (illustrated ed.). Springer. pp. 232–247 [233]. ISBN 9783540664598. ISSN 0302-9743.
  4. ^ Huitt, Robert; Eubanks, Gordon; Rolander, Thomas "Tom" Alan; Laws, David; Michel, Howard E.; Halla, Brian; Wharton, John Harrison; Berg, Brian; Su, Weilian; Kildall, Scott; Kampe, Bill (2025-08-06). Laws, David (ed.). "Legacy of Gary Kildall: The CP/M IEEE Milestone Dedication" (PDF) (video transscription). Pacific Grove, California, USA: Computer History Museum. CHM Reference number: X7170.2014. Retrieved 2025-08-06. […] Eubanks: […] Gary […] was an inventor, he was inventive, he did things. His Ph.D. thesis proved that global flow analysis converges. […] This is a fundamental idea in computer science. […] I took a […] summer course once from a guy named Dhamdhere […] they talked about optimization for like a week and then they put a slide up and said, "Kildall's Method," this is the real story. […] that's something that no one ever thinks about. […] [2][3] (33 pages)
  5. ^ Kildall, Gary A. (1973). "A unified approach to global program optimization". Proceedings of the 1st annual ACM SIGACT-SIGPLAN symposium on Principles of programming languages - POPL '73. pp. 194–206. doi:10.1145/512927.512945. hdl:10945/42162.
  6. ^ Aho, Alfred V.; Lam, Monica S.; Sethi, Ravi; Ullman, Jeffrey D. (2006). Compilers: Principles, Techniques, and Tools (2nd ed.). Pearson. ISBN 978-0321486813.
  7. ^ Nielson, Flemming; Nielson, Hanne R.; Hankin, Chris (2005). Principles of Program Analysis. Springer. ISBN 978-3540654100.
  8. ^ Muchnick, Steven S. (1997). Advanced Compiler Design and Implementation. Morgan Kaufmann. ISBN 978-1558603202.
  9. ^ Cooper, Keith D.; Harvey, Timothy J.; Kennedy, Ken (2025-08-06) [November 2002]. "Iterative Data-Flow Analysis, Revisited" (PDF). PLDI 2003. ACM. TR04-432. Retrieved 2025-08-06.[permanent dead link]
  10. ^ "Static Single Assignment (with relevant examples)". GeeksforGeeks. 2025-08-06. Retrieved 2025-08-06.
  11. ^ Mohnen, Markus (2002). "A Graph—Free Approach to Data—Flow Analysis". Compiler Construction. Lecture Notes in Computer Science. Vol. 2304. pp. 185–213. doi:10.1007/3-540-45937-5_6. ISBN 978-3-540-43369-9.
  12. ^ Kuang, Hongyu; M?der, Patrick; Hu, Hao; Ghabi, Achraf; Huang, LiGuo; Lü, Jian; Egyed, Alexander (2025-08-06). "Can method data dependencies support the assessment of traceability between requirements and source code?". Journal of Software: Evolution and Process. 27 (11): 838–866. doi:10.1002/smr.1736. ISSN 2047-7481. S2CID 39846438.
  13. ^ a b Reps, Thomas; Horwitz, Susan; Sagiv, Mooly (1995). "Precise interprocedural dataflow analysis via graph reachability". Proceedings of the 22nd ACM SIGPLAN-SIGACT symposium on Principles of programming languages - POPL '95. New York, New York, USA: ACM Press. pp. 1, 49–61. doi:10.1145/199448.199462. ISBN 0-89791692-1. S2CID 5955667.
  14. ^ a b Knoop, Jens; Steffen, Bernhard; Vollmer, Jürgen (2025-08-06). "Parallelism for free: efficient and optimal bitvector analyses for parallel programs". ACM Transactions on Programming Languages and Systems. 18 (3): 268–299. doi:10.1145/229542.229545. ISSN 0164-0925. S2CID 14123780.
  15. ^ Naeem, Nomair A.; Lhoták, Ond?ej; Rodriguez, Jonathan (2010), "Practical Extensions to the IFDS Algorithm", Compiler Construction, Lecture Notes in Computer Science, vol. 6011, Berlin / Heidelberg, Germany: Springer Verlag, pp. 124–144, doi:10.1007/978-3-642-11970-5_8, ISBN 978-3-64211969-9
  16. ^ Bodden, Eric (2012). "Inter-procedural data-flow analysis with IFDS/IDE and Soot". Proceedings of the ACM SIGPLAN International Workshop on State of the Art in Java Program analysis. New York, New York, USA: ACM Press. pp. 3–8. doi:10.1145/2259051.2259052. ISBN 978-1-45031490-9. S2CID 3020481.
  17. ^ Rapoport, Marianna; Lhoták, Ond?ej; Tip, Frank (2015). Precise Data Flow Analysis in the Presence of Correlated Method Calls. International Static Analysis Symposium. Lecture Notes in Computer Science. Vol. 9291. Berlin / Heidelberg, Germany: Springer Verlag. pp. 54–71. doi:10.1007/978-3-662-48288-9_4. ISBN 978-3-66248287-2.

Further reading

[edit]
孕妇忌吃什么 灵官爷是什么神 刚感染艾滋病什么症状 三五成群十双在是什么生肖 口若悬河是什么意思
荔枝代表什么寓意 女人物质是什么意思 生化是什么 马甲是什么意思? 为什么来大姨妈会拉肚子
天目湖白茶属于什么茶 诸事皆宜是什么意思 hcy是什么检查项目 什么可以解酒 月经颜色发黑是什么原因
为什么做b超要憋尿 com什么意思 胸闷气短是什么原因造成的 忏悔是什么意思 aww是什么意思
动力是什么意思hcv9jop0ns1r.cn 什么牌子的洗发水好hcv7jop9ns5r.cn 带状疱疹什么不能吃dajiketang.com 爱情的本质是什么hcv8jop0ns0r.cn 线差是什么意思hcv8jop4ns5r.cn
10月1日是什么日子dajiketang.com 胃酸过多有什么症状dajiketang.com 头痛看什么科hcv8jop1ns9r.cn 克是什么单位hcv7jop6ns1r.cn 呼吸困难吃什么药hcv8jop9ns6r.cn
公租房是什么hcv8jop6ns0r.cn 吃绿豆有什么好处hcv8jop3ns0r.cn 上火便秘吃什么药hcv9jop7ns3r.cn zero是什么牌子hcv9jop6ns5r.cn 晕车贴什么时候贴hcv8jop8ns5r.cn
一条条什么shenchushe.com 什么是菊粉zhongyiyatai.com 什么是包皮过长hcv8jop3ns1r.cn 埃及法老是什么意思hcv7jop6ns0r.cn pick什么意思youbangsi.com
百度