Messages in this thread | | | Date | Mon, 12 Jan 2004 16:54:05 -0500 (EST) | From | "Richard B. Johnson" <> | Subject | Re: initialize data not at file scope - WTF? |
| |
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.
- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |