程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> linux編程-關於linux內存 數據段和bss段的疑惑???

linux編程-關於linux內存 數據段和bss段的疑惑???

編輯:編程綜合問答
關於linux內存 數據段和bss段的疑惑???

數據段和bss段分別存放 已初始化/未初始化 的全局變量和靜態變量。

那麼,假如bss段的全局變量和靜態變量在代碼執行中被初始化了,那麼會不會被轉移到
數據段存儲呢???

最佳回答:


首先我覺得你所說的在執行中被初始化的說法是不正確的,應該叫賦值。
接下來我們看一段代碼:

#include <stdio.h>
int a;
int b=10;
int c=11;
int main(void)
{
    int d;
    int e=12;
    return 0;
}

用gcc編譯後,(在linux下用命令size,得到如下結果)

text       data     bss     dec        hex      filename
1115     560          8    1683     693     t10

繼續看下面修改後的代碼:

#include <stdio.h>
int a;
int a1; 
int a2; 
int a3; 
int b=10;
int c=11;
int main(void)
{
    int d;
    int e=12;
    return 0;
}

再用size命令,你會看到:

text       data     bss     dec     hex filename
1115        560      24    1699     6a3 t10

通過這些數據,你應該很容看出bss的大小變化,
而你所說的會不會轉移的問題,我想說,程序被編譯後,
就只會加載代內存中等待執行,不會轉移的。
希望對你有用!

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved