Null references redux
Walter Bright
newshound1 at digitalmars.com
Sun Sep 27 11:08:32 PDT 2009
Rainer Deyke wrote:
> OT, but declaring the variable at the top of the function increases
> stack size.
>
> Example with changed variable names:
>
> void bar(bool foo) {
> if (foo) {
> int a = 1;
> } else {
> int b = 2;
> }
> int c = 3;
> }
>
> In this example, there are clearly three different (and differently
> named) variables, but their lifetimes do not overlap. Only one variable
> can exist at a time, therefore the compiler only needs to allocate space
> for one variable. Now, if you move your declaration to the top:
>
> void bar(bool foo) {
> int a = void;
> if (foo) {
> a = 1;
> } else {
> a = 2; // Reuse variable.
> }
> int c = 3;
> }
>
> You now only have two variables, but both of them coexist at the end of
> the function. Unless the compiler applies a clever optimization, the
> compiler is now forced to allocate space for two variables on the stack.
Not necessarily. The optimizer uses a technique called "live range
analysis" to determine if two variables have non-overlapping ranges. It
uses this for register assignment, but it could just as well be used for
minimizing stack usage.
More information about the Digitalmars-d
mailing list