linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* initialize data not at file scope - WTF?
@ 2004-01-12 21:35 Ian Pilcher
  2004-01-12 21:54 ` Richard B. Johnson
  0 siblings, 1 reply; 2+ messages in thread
From: Ian Pilcher @ 2004-01-12 21:35 UTC (permalink / raw)
  To: linux-kernel

In include/linux/init.h, it says:

   For initialized data:
   You should insert __initdata between the variable name and equal
   sign followed by value, e.g.:

   static int init_variable __initdata = 0;
   static char linux_logo[] __initdata = { 0x32, 0x36, ... };

   Don't forget to initialize data not at file scope, i.e. within a
   function, as gcc otherwise puts the data into the bss section and not
   into the init section.

Does this mean that __initdata can't be used for file scope variables,
that it can only be used for file scope variables, or something else?

Thanks!

-- 
========================================================================
Ian Pilcher                                        i.pilcher@comcast.net
========================================================================


^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: initialize data not at file scope - WTF?
  2004-01-12 21:35 initialize data not at file scope - WTF? Ian Pilcher
@ 2004-01-12 21:54 ` Richard B. Johnson
  0 siblings, 0 replies; 2+ messages in thread
From: Richard B. Johnson @ 2004-01-12 21:54 UTC (permalink / raw)
  To: Ian Pilcher; +Cc: Linux kernel

On Mon, 12 Jan 2004, Ian Pilcher wrote:

> In include/linux/init.h, it says:
>
>    For initialized data:
>    You should insert __initdata between the variable name and equal
>    sign followed by value, e.g.:
>
>    static int init_variable __initdata = 0;
>    static char linux_logo[] __initdata = { 0x32, 0x36, ... };
>
>    Don't forget to initialize data not at file scope, i.e. within a
>    function, as gcc otherwise puts the data into the bss section and not
>    into the init section.
>
> Does this mean that __initdata can't be used for file scope variables,
> that it can only be used for file scope variables, or something else?
>
> Thanks!

Data, not at file-scope, means data like this:

	int foo()
        {
            static int bar = 0;
        }

Bar is private to function foo(). It does not have file-scope.
However, it is static and therefore is expected to persist over
multiple calls to foo. It, therefore, does not exist on the
stack as local data. Instead, it is normally put in ".bss" or
".data" depending upon initialization.

If you want this data to go away after initialization, you
declare it as:

            static int bar __initdata = 0;;

Any data you want to go away after initialization, including
file-scope data, can get the __initdata attribute. FYI, this
puts the data in a special segment that gets freed after
initialization. The idea is to save RAM.

Cheers,
Dick Johnson
Penguin : Linux version 2.4.24 on an i686 machine (797.90 BogoMips).
            Note 96.31% of all statistics are fiction.



^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2004-01-12 21:53 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2004-01-12 21:35 initialize data not at file scope - WTF? Ian Pilcher
2004-01-12 21:54 ` Richard B. Johnson

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).