|Address taken And aliasing firstname.lastname@example.org (2003-05-15)|
|Re: Address taken And aliasing email@example.com (Marco van de Voort) (2003-05-18)|
|From:||Marco van de Voort <firstname.lastname@example.org>|
|Date:||18 May 2003 23:54:28 -0400|
|Organization:||Eindhoven University of Technology, The Netherlands|
|Posted-Date:||18 May 2003 23:54:27 EDT|
I'm no expert, but I'll try :-)
> I, every and then, hear about "address taken" in programming languages
> and compilers.
It's pretty much creating a reference to some symbol (variable, or
part of it, like a field of a record). One way is e.g. the C operator
&, but in other languages there are more.
> I wanted to know what exactly it meant.
The general idea is keeping an memory location (or a measure for that) to
a variabele in a different variabele or register.
> And I also
> wanted to know the relationship between address taken and aliasing
> information that front end of the compiler generates.
E.g. If I take the address somewhere, I mark the new variabele as an alias of
Assume we have this. (in pascal'ish syntax, @ is the same as & in C)
var number : Integer;
othernumber : Integer;
ref : ^Integer; // pointer
ref:=@number; // take address.
while number>0 Do
Writeln(ref^); // print value the pointer points to.
Assume we have no knowledge of ref pointing to number.
We could then optimise this loop by moving number to some register and
decrement it ten times.
However that would give a different result, since Writeln(ref^) is supposed
to print the value of Number.
Because we marked ref as an alias to number, we know how far we can go with
(what code exactly will be generated depends on the quality of the
optimizer, and how the printing runtime routine wants its parameters, which
registers it spoils etc.
If the printing routine simply wants the argument in a register, and saves
all other regs, we can still safely optimize and put number in a register)
Return to the
Search the comp.compilers archives again.