[PATCH] top: fix parsing of /proc/meminfo
Timo Teras
timo.teras at iki.fi
Tue Jul 22 17:24:30 UTC 2014
On Tue, 22 Jul 2014 13:07:15 -0400
"Cathey, Jim" <jcathey at ciena.com> wrote:
> >Am I missing something here? There is no structure, just a
> >character pointer. If you leave off "static" it will be compiled as
> >an instruction that pushes a constant onto the stack, by any/every
> >compiler.
>
> Which is probably _larger_ code than just referring to something
> stored in the .text/.data segment. It's copying something that is
> found in text/data into the stack space, then referring to that
> address thereafter. The compiler has to do:
>
> Copy A->B
> Then use &B.
>
> -vs-
>
> Use &A.
>
> You do this when you want the ability to modify B.
> If A is fixed and inviolate, you mark it static const
> and be done with it. What this turns into, exactly,
> depends upon your compiler, CPU, and ABI, but I can't
> think of any case where the extra copy is going to
> turn out _better_ than the simpler case.
Usage of 'static' depends whether it's "const char *" or "const
char[]". When defining "const char *" static does not make sense, as
in theory it should enforce *also* the pointer value to go to .rodata
(the string literal of course goes there too). So you might end up
wasting one extra pointer in .rodata.
OTOH, with "const char[]" you definitely want the "static" as other
wise you'd end up with the copy described above.
I only suggested removing 'static' since I had it a pointer. The latest
patch has array, and thus is static.
/Timo
More information about the busybox
mailing list