[vox-tech] behind the scenes of static
Peter Jay Salzman
vox-tech@lists.lugod.org
Fri, 26 Jul 2002 18:44:27 -0700
begin Mark K. Kim <markslist@cbreak.org>
> Pete,
>
> I think this question is regarding C, right?
yeah.
> > or do we just use the same keyword to denote two very different things?
>
> That's my understanding.
that's too bad. "static" (IMHO) sounds like it applies to static
automatics, but i can think of a ton of more suitable keywords for
static external objects.
> 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.
i see what your saying, but it just seems like a more suitable task for
the linker. the process of (resolving or) removing symbol names after
compilation just seems like more in the realm of linking.
not that *i'm* a compiler writer either...
it's too bad nobody from zworld's compiler group is on the list. they
have to wrestle with details like this.
pete
> 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