[vox-tech] behind the scenes of static

Mark K. Kim vox-tech@lists.lugod.org
Fri, 26 Jul 2002 18:19:51 -0700 (PDT)


Pete,

I think this question is regarding C, right?

> or do we just use the same keyword to denote two very different things?

That's my understanding.

Declaring global variables and functions as "static" keeps the scope of
the variable/function to the file.  I'm no compiler writer, but this could
be done simply by compiling the file, then removing the static symbol
names.  If that's how things are done, this would be a task done by the
compiler, not the linker.

Declaring local variables as static makes the variable same as global, but
the variable name is resolvable only from the local scope.  Again, I'm not
a compiler writer, but I'd think static local variables would be
implemented as same as a global variable, but without exposing the symbol
name outside the scope.  Maybe there's some help from the linker to
implement this, but I'd think it'd be possible to implement it using some
compiler tricks.

-Mark

On Fri, 26 Jul 2002, Peter Jay Salzman wrote:

> i'm well aware of what the static declaration does from a pragmatic POV,
> but i've always wondered what the connection was between static external
> and static automatic objects.
>
> it seems like it does fundamentally different things.  declaring
> external variable and function names as being static seems like a
> linker-ish directive: keeping the names at filescope seems like
> something a linker would do.
>
> in contrast, declaring automatic variable static seems like a runtime
> thing.  i *think* the variable allocation is done in the heap, rather
> than the stack, since the variables stick around even when the function
> stack frame is released.
>
> the apparent difference always bugged me, but i never questioned it.
>
> what is the underpinning commonality between declaring external objects
> as static and declaring automatic objects as being static?  is there
> one?
>
> or do we just use the same keyword to denote two very different things?
>
> pete
>
> --
> GPG Fingerprint: B9F1 6CF3 47C4 7CD8 D33E  70A9 A3B9 1945 67EA 951D
> _______________________________________________
> vox-tech mailing list
> vox-tech@lists.lugod.org
> http://lists.lugod.org/mailman/listinfo/vox-tech
>

--
Mark K. Kim
http://www.cbreak.org/
PGP key available upon request.