Related articles |
---|
Address taken And aliasing ednaprs@yahoo.ca (2003-05-15) |
Re: Address taken And aliasing marcov@snail.stack.nl (Marco van de Voort) (2003-05-18) |
From: | Marco van de Voort <marcov@snail.stack.nl> |
Newsgroups: | comp.compilers |
Date: | 18 May 2003 23:54:28 -0400 |
Organization: | Eindhoven University of Technology, The Netherlands |
References: | 03-05-102 |
Keywords: | practice |
Posted-Date: | 18 May 2003 23:54:27 EDT |
I'm no expert, but I'll try :-)
Ednap wrote:
> 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
the other.
Assume we have this. (in pascal'ish syntax, @ is the same as & in C)
var number : Integer;
othernumber : Integer;
ref : ^Integer; // pointer
Begin
number:=10;
ref:=@number; // take address.
while number>0 Do
Begin
Writeln(ref^); // print value the pointer points to.
Dec(Number);
End;
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
optmizing.
(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
comp.compilers page.
Search the
comp.compilers archives again.