用size命令分析linux程式記憶體段的分布

2021-08-28 06:51:43 字數 4777 閱讀 7526

**

size命令的輸出不包括stack和heap的部分。只包括文字段(text), **段(data),未初始化資料段(bss)三部分。

1、文字段:包含程式的指令,它在程式的執行過程中一般不會改變。

2、資料段:包含了經過初始化的全域性變數和靜態變數,以及他們的值。

3、bss段:包含未經初始化的全域性變數和靜態變數。

4、堆疊段:包含了函式內部宣告的區域性變數。當然,上面段的作用不僅於此,具體的作用

int main()

[root@pc201 ccodes]# size a.out 

text    data     bss     dec     hex filename

960     248       8    1216     4c0 a.out          

-------------------------------    

[root@pc201 ccodes]# cat test.c

int g_data;

int main()

[root@pc201 ccodes]# size a.out                       [root@pc201 ccodes]# size a.out                 

text    data     bss     dec     hex filename         text    data     bss    dec     hex 

960     248      12    1220     4c4 a.out             960     248      8    1216     4c0 

論1:未初始化的全域性變數儲存在bss段

-------------------------------

[root@pc201 ccodes]# cat test.c

int g_data=1;

int main()

[root@pc201 ccodes]# size a.out                       [root@pc201 ccodes]# size a.out                 

text    data     bss     dec     hex filename         text    data     bss    dec     hex 

960     252       8    1220     4c4 a.out             960     248      8    1216     4c0 

論2:經過初始化的全域性變數儲存在資料段中

-------------------------------  

[root@pc201 ccodes]# cat test.c

int main()

[root@pc201 ccodes]# size a.out                       [root@pc201 ccodes]# size a.out                 

text    data     bss     dec     hex filename         text    data     bss    dec     hex

960     248      12    1220     4c4 a.out             960     248      8    1216     4c0

論3:未初始化的靜態變數儲存在bss段中

--------------------------------  

[root@pc201 ccodes]# cat test.c

int main()

[root@pc201 ccodes]# size a.out                       [root@pc201 ccodes]# size a.out                 

text    data     bss     dec     hex filename         text    data     bss    dec     hex 

960     252       8    1220     4c4 a.out             960     248      8    1216     4c0 

論4:經過初始化的靜態變數儲存在資料段中

-------------------------------

[root@pc201 ccodes]# cat test.c

int main()

[root@pc201 ccodes]# size a.out                       [root@pc201 ccodes]# size a.out                 

text    data     bss     dec     hex filename         text    data     bss    dec     hex 

976     248       8    1232     4d0 a.out             960     248      8    1216     4c0 

論5:函式內部宣告的區域性變數儲存在堆疊段(text)

------------------------------

[root@pc201 ccodes]# cat test.c

const int g_data=1;

int main()

[root@pc201 ccodes]# size a.out                       [root@pc201 ccodes]# size a.out                 

text    data     bss     dec     hex filename         text    data     bss    dec     hex 

964     248       8    1220     4c4 a.out             960     248      8    1216     4c0 

論6:const修飾的全域性變數儲存在文字段

------------------------------

[root@pc201 ccodes]# cat test.c

int main()

[root@pc201 ccodes]# size a.out                      [root@pc201 ccodes]# size a.out                

text    data     bss     dec     hex filename        text    data     bss    dec     hex 

976     248       8    1232     4d0 a.out            960     248       8    1216     4c0 

結論7:const修飾的區域性變數儲存在堆疊段

------------------------------

[root@pc201 ccodes]# cat test.c

char *pstr="";

int main()

[root@pc201 ccodes]# size a.out                       [root@pc201 ccodes]# size a.out                 

text    data     bss     dec     hex filename         text    data     bss    dec     hex 

961     252       8    1221     4c5 a.out             960     248      8    1216     4c0 

[root@pc201 ccodes]# cat test.c

char *pstr="123456789";

int main()

[root@pc201 ccodes]# size a.out                    [root@pc201 ccodes]# size a.out                

text    data     bss     dec     hex filename       text    data     bss    dec     hex 

970     252       8    1230     4ce a.out           960     248       8    1216     4c0 

以發現,前後資料段和bss段大小均未發生變化,而文字段增加了9個位元組。    

論8:字串常量儲存在文字段

結論 1、經過初始化的全域性變數和靜態變數儲存在資料段中。

2、未經初始化的全域性變數和靜態變數儲存在bss段。

3、函式內部宣告的區域性變數儲存在堆疊段中。

4、const修飾的全域性變數儲存在文字段中,const修飾的區域性變數儲存在堆疊段中。

5、字串常量儲存在文字段中。

Linux命令分析 touch

用途 更改檔案的時間戳,常用來建立新的空檔案 用法 touch 選項.檔案.touch命令可用來更改檔案的atime和mtime到當前時間,如果touch命令後接的檔案不存在,則會建立乙個該檔名的空檔案 除非有 c或 h引數 引數 a 只更改atime c no create 不建立任何檔案 d d...

Linux命令分析 whereis

用途 用於定位命令的二進位制檔案,原始碼檔案和man說明檔案的路徑 用法 whereis bmsu bms 目錄.f 檔案.whereis命令通過查詢mlocate資料庫來定位檔案,故執行速度較快,該資料庫在centos下的路徑是 var lib mlocate mlocate.db,該資料庫用來記...

Linux命令分析 mount

用途 掛載裝置到指定的掛載點 用法 mount lhv mount a ffnrsvw t vfstype o optlist mount fnrsvw o option option device dir mount fnrsvw t vfstype o options device dir mo...