|
Authored by: bugstomper on Tuesday, May 15 2012 @ 10:13 PM EDT |
"If the numeric references (referred to as CCCC in the trial) were used as
symbolic references as Oracle states, wouldn't the table be in the form of
CCCC1, data1, CCCC2, data2, etc.?"
Not quite, there is another less time-efficient possibility, which is what
Dalvik does to save space.
The Field Table specifies the field's name as a string, and also points to the
class object in the Class Table. The class object has a list of fields, each
containing a name as a string.
Instead of looking up a name in some symbol table like you describe, the code
does a linear search through all the fields of the class looking for the string.
That is slower but it saves space, and the extra time is all spent in advance
during the static symbol resolution when dexopt is run.
[ Reply to This | Parent | # ]
|
|
Authored by: Anonymous on Wednesday, May 16 2012 @ 12:24 AM EDT |
CCCC is a number, in hexadecimal. Hexadecimal is base 16,
which is 2
raised to the 4th power. Since we have 10 digits (0-9), six more must
be added:
A (10), B (11), C (12), D (13), E (14), and F (15). [ Reply to This | Parent | # ]
|
|
Authored by: Anonymous on Wednesday, May 16 2012 @ 05:03 AM EDT |
They are confusing terms of art.
A Symbolic reference needs to be converted first to a
Direct Address or Direct Index or an Indirect Index
But they are not the same thing.
Any data processing program does the same thing, so of course dexopt can resolve
symbolic references
[ Reply to This | Parent | # ]
|
|
Authored by: BitOBear on Wednesday, May 16 2012 @ 06:53 AM EDT |
Index Reference: "Give me the third card".
Symbolic Reference: "Give me the jack of diamonds".
In an index, numeric, or address reference you do not have to examine the
contents of the data (e.g. waht's on the card) to determine whether the card in
hand is the card to be returned. You can "dereference" the reference
blindfolded. "Blindfolded" in a computational sense is "using
pure math".
In a Symbolic reference, you must examine each candidate card to determine if
the candidate being considered is the item to be returned. You can not do it
blindfolded.
Now lets pretend that each card has had "an action directive" added to
it on the "back" side of the card. Many are innocuous like "stand
up for one minute", some are positive "hug a stranger", and some
are negative "kill a stranger". These acts themselves are
"found" by finding the card. In the numeric/table lookup/index version
the "front side" of the card could even be blank. In the symbolic
version it must not be blank.
Now once you know that "the ace of spades" is the "kill a
stranger" card, you don't need to look for it in the deck again next time
it comes up. You already know what you will read when you flip over that card.
So when some DRM cartel boss tells you to "pull the ace of spades" you
can just walk directly out and do the deed without consulting the cards. This
direct act is the "optimization".
In the 104 patent you learn which cards are which -only- when you are sent in
search of a card.
In Dalvic, the dexopt process just reads all the cards once, then looks at all
the code for "go do (a card)" instructions and replaces them with the
"go do this act" instructions. (e.g. iget becomes iget_quick).
Now it turns out that Dalvic -never- has a "go do 'the ace of spades'"
(e.g. a symbolic reference) because it has -never- actually shuffled the deck.
It knows that the Ace of Spades is the 52nd card, and the king of spades is the
51st card right down to the ace of hearts being the 1st card. So it never uses
the cards names, it just has "go do card number 52" and it cant -ever-
have the symbol instead of the location.
Now Dalvic has several decks of cards. It has the deck of strings, the deck of
constants, the deck of types and so on. But this doesn't matter because the
instruction knows which deck is which.
Dalvic can also "resolve symbolic references" by having the deck of
strings contain the names of something stored in another place. Curcially,
however, those strings never end up "in the instruction" because the
instruction reference can only be a numeric index.
Crucially again, the dexopt -never- resolves these runtime dynamic references
because it is WHOLLY UNABLE TO DO SO because it is run on the program which
exists -before- there is any data or symbols to reference in this way. The
static optimization can only optimize the static data because the dynamic data
doesn't exist yet.
For instance, the dynamic data in your "contact list" is your list of
friends and enemies and family members and whatnot. When your phone was
delivered the contact list application was installed long before there was a you
with respect to this phone, who could then put those actual contacts in that
list.
Likewise if you update the contact list application dexopt does the same install
task to the application dex file -before- that file is run, and it is running
that file that lets the application read the list of contacts out of the
"list of contacts file or database" and into the application. Again,
no dynamic data can be generated until execution of the application -creates-
-some- -dynamic- -data-.
So number with math to find thing is "table lookup" or "index
lookup".
Against symbol plus pawing around in a bunch of data to find the matching weenee
is "symbol lookup" or "symbolic dereference" or
"resolving a symbolic reference".
The fact that being told to get the "three of clubs" involves the
number 3 is immaterial, because you have to look at the cards to find the card
you want.
Symbolic References are the basis of the worst (most expensive) card trick in
the computer party entertainment fun pack.
[ Reply to This | Parent | # ]
|
|
|
|
|