[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