C 和C關於BSS段的區別

2021-10-18 07:12:33 字數 436 閱讀 7305

當編譯器遇到如下定義:

point global;

觀念上point的 trivial construction 和 destruction 都會被產生和呼叫,事實上,這些 trival members 要麼沒被產生,要麼沒被呼叫。

在c中,global被視為乙個「臨時性的定義」,因為他沒有顯示化的初始化操作,乙個「臨時性的定義」可以在程式中發生多次,那些例項會被鏈結器摺疊起來,只留下乙個單獨的例項,放在程式 data segment 中的bss段;c++並不支援「臨時性的定義」,這是因為class構造行為的隱式應用之故,因此global在c++中被視為完全定義(它會阻止第二個或更多的定義)。

c和c++乙個差異在於,bss data segment 在c++中相對地不重要,c++所有的全域性物件都被以「初始化過的資料」來對待

bss段和 data段的區別

在採用段式記憶體管理的架構中 比如intel的80x86系統 bss段 block started by symbol segment 通常是指用來存放程式中未初始化的全域性變數的一塊記憶體區域,一般在初始化時bss 段部分將會清零。bss段屬於靜態記憶體分配,即程式一開始就將其清零了。比如,在c語...

關於bss段的理解

bss不佔據程式可執行程式大小,只在段表中記錄大小,在符號表中記錄符號。當檔案載入執行時,才分配空間以及初始化。bss段的大小,記錄在段表裡裡,記錄的是所有未初始化變數總共的大小,bss段只在段表裡有個記錄,但實現並不存在這個段.static int g static short int h int...

BSS段和資料段的區別

bss段 bss段 bss segment 通常是指用來存放程式中未初始化的全域性變數的一塊記憶體區域。bss是英文block started by symbol的簡稱。bss段屬於靜態記憶體分配。資料段 資料段 data segment 通常是指用來存放程式中已初始化的全域性變數的一塊記憶體區域。...