全域性/靜態變數初始化為0放在bss段還是data段
2013-6-4上午去面試,被鄙視了,技術公司大牛的風範,好犀利!不過我這題應該是蒙對了。。
如:static unsigned char s_test = 0;
這個靜態變數是放到bss段還是data段呢,以下是我編譯的結果:(全域性變數也是如此)
1.看這樣子,即使是初始化了,但是初始化的是0,還是放在bss段的
2.這裡還有一個問題,即使是全域性定義了一個變數,若後面程式不使用的話,還是預設不分配這個變數空間的.
(至少說ARM的ADS編譯器是如此,是否具有普遍性,暫時還不知道 - - ! )
3.注:
BSS(Block Started by Symbol)通常是指用來存放程式中未初始化的
注意和資料段的區別,BSS存放的是未初始化的全域性變數和靜態變數,資料段存放的是初始化後的全域性變數和靜態變數。
UNIX下可使用size命令檢視可執行檔案的段大小資訊。如size a.out。
相關推薦
全域性/靜態變數初始化為0放在bss段還是data段
2013-6-4上午去面試,被鄙視了,技術公司大牛的風範,好犀利!不過我這題應該是蒙對了。。 如:static unsigned char s_test = 0; 這個靜態變數是放到bss段還是data段呢,以下是我編譯的結果:(全域性變數也是如此) 1.看這樣子,即
【C】為什麼靜態變數會被初始化為0,而自動變數卻不會被初始化?
把自動變數初始化為0的代價,將會增加函式呼叫的代價。C語言非常注重執行速度。 然而,把全域性變數區初始化為0,僅僅在程式啟動時候產生成本。這也許是這個問題的主要原因。 更精確的說,C++並不把靜態變數初始化為0,他們有自己的預設值,對於原生型別(native types)來
全域性初始化變數/全域性未初始化變數/全域性靜態變數/區域性變數的儲存位置,作用域,與生命週期
比如如下程式程式碼片段 int a = 0; char *p1; static int x = 10; int main(void) { int b = 0; char
[Objective-C] 哪些變數預設初始化為0
參考: 1) Objective-C中,類的非靜態 變數(class instance variable 或 ivar)預設都是初始化成0,由編譯器保證,無需程式設計師自己手工初始化成0。 An allocation message does other im
Thymeleaf新增全域性靜態變數
問題:在使用Thymeleaf模板時,某些地方需要使用全域性變數,即在Java中一處賦值,在任何頁面均可獲取。 解決方法: @Resource private void configureThymeleafStaticVars(ThymeleafViewResolve
Java靜態變數初始化及建構函式的執行順序與執行時機分析
對於Java初學者來說,關於靜態變數、非靜態變數的初始化時機與順序,以及建構函式的執行時機與順序都會感覺有點理不清頭緒,下面文章使用例項程式幫大家解決這方面的疑惑。雖然簡單,但是對Java入門者來說還是有一定的幫助作用。
申明陣列如何初始化為0
申明一陣列 int array[1024] 有時候裡面的值不確定的,稱作野值 ,可以通過以下幾種方法對其初始化成0。 1. 最簡單的方法,申明之後,for 迴圈進行0賦值 for(int i=0; i<1024; i++) { array[i]=0; }
Java靜態方法,靜態變數,初始化順序
靜態方法的宣告和定義 定義一個靜態方法和定義一個例項方法,在形式上並沒有什麼區別,只是在宣告的頭部,需要加上一個關鍵字static。它的一般語法形式如下: [訪問許可權修飾符] static [返回值型別] 方法名([引數列表]){ 語句序列 } 例如下面是一個靜態的方法: pu
【C#】全域性變數、全域性靜態變數、區域性變數、區域性靜態變數的區別
C#中變數分為:全域性變數、靜態全域性變數、區域性變數和靜態區域性變數。 1、按儲存區域分 (1)全域性變數、靜態全域性變數和靜態區域性變數都存放在記憶體的靜態儲存區域; (2)區域性變數存放在記憶體的棧區。 2、按作用域分
陣列,結構體初始化為0
一直以為 int a[256]={0};是把a的所有元素初始化為0,int a[256]={1};是把a所有的元素初始化為1. 除錯的時檢視記憶體發現不是那麼一回事,翻了一下《The C++ Programming Language》總算有定論。PDF的竟然不然複製,就把它這
wpf繫結全域性靜態變數(mvvm)
原文 wpf繫結全域性靜態變數(mvvm) 在實際的開發中,有一些集合或者屬性可能是全域性的,比如當你做一個oa的時候,可能需要展示所有的人員,這時這個所有的人員列表顯然可以作為全域性引數,比如這裡有一個全域性的靜態屬性UserList。而你在使用mvvm做wpf開發的時候,一般每個view都已經
全域性/靜態變數跨模組(DLL)引用
全域性/靜態變數作用範圍為整個模組(exe\dll),如果其他模組需要引用必須顯示匯出,類內部的靜態變數一樣,只是引用範圍需要加上類的作用域,這個從類中聲名靜態變數,但是要在CPP中定義該變數可以看出,跟全域性變數是一樣的。如果在其他模組中引用類中的靜態變
全域性變數與全域性靜態變數的區別
全域性變數與全域性靜態變數的區別: 1、若程式由一個原始檔構成時,全域性變數與全域性靜態變數沒有區別。 2、若程式由多個原始檔構成時,全域性變數與全域性靜態變數不同:全域性靜態變數使得該變數成為定義該變數的原始檔所獨享,即:全域性靜態變數對組成該程式的其它原始檔是無效的。 3、具有外部連結的靜態;可
C++陣列初始化為0
區域性陣列:沒有預設值,如果宣告的時候不定義,則會出現隨機數(undefined);如果宣告的長度與賦值長度不相等,則有,宣告的長度>賦值長度,後面用0補足,宣告的長度>賦值長度,發生編譯錯誤; 全域性陣列:宣告時不賦值,預設值為0 指標new:
靜態變數初始化的時機
靜態變數的記憶體分配和初始化 對於C語言的全域性和靜態變數,不管是否被初始化,其記憶體空間都是全域性的;如果初始化,那麼初始化發生在任何程式碼執行之前,屬於編譯期初始化。由於內建變數無須資源釋放操作,僅需要回收記憶體空間,因此程式結束後全域性記憶體空間被一起回收,不存在
c++中對類中私有成員中的靜態變數初始化
1.static成員的所有者是類本身和物件,但是多有物件擁有一樣的靜態成員。從而在定義物件時不能通過建構函式對其進行初始化。 2.靜態成員不能在類定義裡邊初始化,只能在class body外初始化。 3.靜態成員仍然遵循public,private,protected訪問準
.使用malloc開闢一個3*4的二維陣列,並將內容初始化為0-11
方法一·: 很容易聯想到使用指標陣列 <pre name="code" class="cpp">#define ROW 3 #define COL 4 void Test4() {
c二維陣列初始化為0的2種實現方式
1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <string.h> 4 int main() 5 { 6 //char a[2][4] ; 7
如何將陣列初始化為0?
轉載自:http://www.cnblogs.com/programnote/p/4719078.html C語言中,宣告陣列的語句: int arr[100]; 這樣宣告得到的數組裡面的儲存的是隨機的我們不知道的資料,對使用者來說就是垃圾。有許多情況我們要將陣列初
單例模式中靜態變數初始化與不初始化有什麼區別
public class Singleton { private static Singleton obj = new Singleton(); public static int counter1; public static int counter2 = 0