File tree 2 files changed +27
-4
lines changed
2 files changed +27
-4
lines changed Original file line number Diff line number Diff line change 3
3
4
4
# Folder pointer-analysis
5
5
6
- \author Martin Brain
6
+ \author Martin Brain, Chris Smowton
7
7
8
8
To perform symbolic execution on programs with dereferencing of
9
9
arbitrary pointers, some alias analysis is needed. ` pointer-analysis `
@@ -15,7 +15,20 @@ subtle and sophisticated and thus there may be bugs.
15
15
16
16
\subsection pointer-analysis-object-numbering Object / expression numbering (object_numberingt)
17
17
18
- To be documented.
18
+ Object numbering assigns numbers to expressions, allowing other pointer-analysis
19
+ classes to use small, cheap to compare, cheap to sort numbers in place of
20
+ \ref exprt instances. Numbering also saves memory, as two identical exprt
21
+ objects will be assigned the same number, eliminating redundant storage of the
22
+ same data.
23
+
24
+ Alternative approaches to the same problem include \ref irept sharing (but this
25
+ only shares when a copy is taken; two identical irepts arrived at by different
26
+ routes will not be shared) and \ref merge_irept (which does merge identical
27
+ ireps, but is still more expensive to compare than numbers).
28
+
29
+ Object numbering is used by \ref value_sett and cousins (such as
30
+ \ref value_set_fit) in an effort to reduce the memory dedicated to value-set
31
+ storage.
19
32
20
33
\subsection pointer-analysis-pointer-offset-sum Pointer-offset sum (pointer_offset_sum)
21
34
Original file line number Diff line number Diff line change 1
1
/*******************************************************************\
2
2
3
- Module: Value Set
3
+ Module: Object Numbering
4
4
5
5
Author: Daniel Kroening, [email protected]
6
6
7
7
\*******************************************************************/
8
8
9
9
/// \file
10
- /// Value Set
10
+ /// Object Numbering
11
+ ///
12
+ /// This is used to abbreviate identical expressions by number: for example,
13
+ /// an object_numberingt instance might maintain the map:
14
+ /// ```
15
+ /// 1 -> constant_exprt("Hello", string_typet())
16
+ /// 2 -> constant_exprt("World", string_typet())
17
+ /// ```
18
+ /// Then any users that agree to use the same object_numberingt instance as a
19
+ /// common reference source can use '1' and '2' as shorthands for "Hello" and
20
+ /// "World" respectively.
11
21
12
22
#ifndef CPROVER_POINTER_ANALYSIS_OBJECT_NUMBERING_H
13
23
#define CPROVER_POINTER_ANALYSIS_OBJECT_NUMBERING_H
You can’t perform that action at this time.
0 commit comments