To be more precise, all the content of the .init section will be freed at the end of the boot. (see vmlinux.lds.S)
This is done by the function "free_initmem()" which is an architecture specific function defined in linux-*/arch/<arch>/mm/init.c.

This function frees the memory between the symbols __init_begin and __init_end (which need to be page-aligned).

During compilation, all symbols defined with __init macro are put in the .init section.
As explained before, these a