1. 程式人生 > >linux中的_init應用,含有__attribute__ 和section的意義和作用

linux中的_init應用,含有__attribute__ 和section的意義和作用

在linux/init.h中定義如下:

#define __init__section(.init.text) __cold notrace

有些版本的核心是這樣定義的:

#define __init      __attribute__ ((__section__ (".init.text"))) __cold

__attribute__ 是什麼?

linux核心程式碼使用了大量的GNU C擴充套件,以致於使GNU C成為唯一能夠編譯核心的編譯器,

GNU C這些擴充套件對程式碼的優化、目的碼佈局和安全檢查提供了支援。

__attribute__ 就是這些擴充套件中的一個,它主要用來宣告一些特殊的屬性,這些屬性指示


編譯器進行特定的優化和更仔細的程式碼檢查。

GNU C支援十幾個屬性,section是其中一個。

通常編譯器將函式放在.text節,變數放在.data位元組或.bss節,

使用section屬性,可以指定編譯器將函式和變數放在特定節,

那麼_init的修飾或者用_init定義的作用就是將它修飾的程式碼放在.init.text節中。

連結器可以將相同節的函式或資料放在一起,比如_init修飾的程式碼放在.init.text節裡,

初始化後可以釋放部分記憶體。

簡單來說是指示gcc把標記的資料或者函式放到指定sector。
linux中把一些啟動及初始化時候用的資料用__init標識,然後在適當的時候把它們釋放,回收記憶體。


好像這裡引出了更多的疑問,

__attribute__

是什麼

?Linux

核心程式碼使用了大量的

GNU 

C

擴充套件,以至於

GNU C

成為能夠編譯核心的唯一編譯器,

GNU C

的這些擴充套件對程式碼優化、目標

程式碼佈局、

安全檢查等方面也提供了很強的支援。

__attribute__

就是這些擴充套件中的一個,

它主要被用來宣告一些特殊的屬性,

這些屬性主要被用來指示編譯器進行特定方面的優化和

更仔細的程式碼檢查。

GNU C

支援十幾個屬性,

section

是其中的一個,我們檢視

GCC

的手冊

可以看到下面的描述


好像這裡引出了更多的疑問,

__attribute__

是什麼

?Linux

核心程式碼使用了大量的

GNU 

C

擴充套件,以至於

GNU C

成為能夠編譯核心的唯一編譯器,

GNU C

的這些擴充套件對程式碼優化、目標

程式碼佈局、

安全檢查等方面也提供了很強的支援。

__attribute__

就是這些擴充套件中的一個,

它主要被用來宣告一些特殊的屬性,

這些屬性主要被用來指示編譯器進行特定方面的優化和

更仔細的程式碼檢查。

GNU C

支援十幾個屬性,

section

是其中的一個,我們檢視

GCC

的手冊

可以看到下面的描述

參考:

http://wenku.baidu.com/view/36e7bb24ccbff121dd368344.html

好像這裡引出了更多的疑問,

__attribute__

是什麼

?Linux

核心程式碼使用了大量的

GNU 

C

擴充套件,以至於

GNU C

成為能夠編譯核心的唯一編譯器,

GNU C

的這些擴充套件對程式碼優化、目標

程式碼佈局、

安全檢查等方面也提供了很強的支援。

__attribute__

就是這些擴充套件中的一個,

它主要被用來宣告一些特殊的屬性,

這些屬性主要被用來指示編譯器進行特定方面的優化和

更仔細的程式碼檢查。

GNU C

支援十幾個屬性,

section

是其中的一個,我們檢視

GCC

的手冊

可以看到下面的描述