第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么需要.bss段?

為什么需要.bss段?

慕村225694 2019-10-05 14:42:33
我知道的是,全局變量和靜態(tài)變量存儲在.data段中,而未初始化的數據存儲在.bss段中。我不明白的是,為什么我們有專用于未初始化變量的段?如果未初始化的變量在運行時分配了值,那么該變量是否.bss僅仍存在于段中?在以下程序中,  a在.data段中,并且b在.bss段中;那是對的嗎?如果我的理解是錯誤的,請糾正我。#include <stdio.h>#include <stdlib.h>int a[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9};int b[20]; /* Uninitialized, so in the .bss and will not occupy space for 20 * sizeof (int) */int main (){   ;}  另外,請考慮以下程序,#include <stdio.h>#include <stdlib.h>int var[10];  /* Uninitialized so in .bss */int main (){   var[0] = 20  /* **Initialized, where this 'var' will be ?** */}
查看完整描述

3 回答

?
jeck貓

TA貢獻1909條經驗 獲得超7個贊

原因是減小程序大小。想象一下,您的C程序在嵌入式系統(tǒng)上運行,其中代碼和所有常量都保存在真正的ROM(閃存)中。在這樣的系統(tǒng)中,必須在調用main()之前執(zhí)行初始的“ copy-down”以設置所有靜態(tài)存儲持續(xù)時間對象。通常將如下所示:


for(i=0; i<all_explicitly_initialized_objects; i++)

{

  .data[i] = init_value[i];

}


memset(.bss, 

       0, 

       all_implicitly_initialized_objects);

.data和.bss存儲在RAM中,而init_value存儲在ROM中。如果它是一個段,則ROM必須填充很多零,從而顯著增加ROM的大小。


盡管基于RAM的可執(zhí)行文件沒有真正的ROM,但它們的工作原理類似。


同樣,memset可能是一些非常有效的內聯(lián)匯編程序,這意味著可以更快地執(zhí)行啟動復制。


查看完整回答
反對 回復 2019-10-05
?
森林海

TA貢獻2011條經驗 獲得超2個贊

.bss細分是一種優(yōu)化。整個.bss段用一個數字描述,可能是4個字節(jié)或8個字節(jié),該數字給出了運行過程中它的大小,而該.data部分則與初始化變量的大小之和一樣大。因此,這.bss使得可執(zhí)行文件更小,加載更快。否則,變量可能位于.data顯式初始化為零的段中;該程序很難分辨出差異。(詳細來說,其中的對象地址.bss可能與該.data段中的地址不同。)

在第一個程序,a將在.data鏈段和b將在.bss可執(zhí)行文件的段。加載程序后,區(qū)別就不再重要了。在運行時,b占用20 * sizeof(int)字節(jié)。

在第二個程序中,var分配了空間,并且分配main()修改了該空間。碰巧的var是,.bss段中描述的空間而不是.data段中描述的空間,但這并不影響程序在運行時的行為方式。


查看完整回答
反對 回復 2019-10-05
?
富國滬深

TA貢獻1790條經驗 獲得超9個贊

從匯編語言步驟分步:使用Linux編程杰夫Duntemann,有關。數據部分:


本。數據部分包含初始化的數據項的數據定義。初始化數據是在程序開始運行之前具有值的數據。這些值是可執(zhí)行文件的一部分。當將可執(zhí)行文件加載到內存中以供執(zhí)行時,它們會加載到內存中。


關于.data節(jié)要記住的重要一點是,您定義的初始化數據項越多,可執(zhí)行文件將越大,并且在運行它時將其從磁盤加載到內存所需的時間也越長。


和.bss部分:


在程序開始運行之前,并非所有數據項都需要具有值。例如,當您從磁盤文件中讀取數據時,需要有一個放置數據的位置,以便將數據從磁盤中導入。程序的.bss部分中定義了類似的數據緩沖區(qū)。您為緩沖區(qū)留出了一定數量的字節(jié),并為緩沖區(qū)指定了名稱,但是您沒有說緩沖區(qū)中將出現(xiàn)什么值。


.data節(jié)中定義的數據項與.bss節(jié)中定義的數據項之間存在至關重要的區(qū)別:.data節(jié)中的數據項增加了可執(zhí)行文件的大小。.bss部分中的數據項沒有??梢栽?bss中定義一個占用16,000字節(jié)(或更多,有時更多的字節(jié))的緩沖區(qū),并且?guī)缀醪辉黾尤魏蝺热荩枋鲋写蠹s50字節(jié))。


查看完整回答
反對 回復 2019-10-05
  • 3 回答
  • 0 關注
  • 1808 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號