2017-04-13 55 views
-1

,我在我的筆記本電腦上運行一個簡單的代碼(Ubuntu的伴侶64位)用簡單的代碼在Solaris平臺沒有垃圾值

# include <stdio.h> 

int main() 
{ 
    int i,j,l=0,swap,n,k,a[100],b[100],count; 

    printf("%d", count); 
} 

正如預期的那樣,這應該會返回垃圾回收價值,並且它做的正是這一點。 我也跑了好幾次。我每次都得到不同的結果,這表明每次都分配了新的內存。輸出是這樣的。

32576 
33186 
0 
29318 
0 
32111 
0 

但是,請注意,對於某些情況下,我得到零

現在這個相同的代碼是在Solaris服務器上執行。我在連接到這臺solaris服務器的瘦客戶機上運行它。但是這一次,程序只打印0,不管我執行程序的次數多少。我從另一個帳戶登錄到服務器,但仍然得到了相同的結果。 我認爲solaris機器有某種無法回收的垃圾回收器,但事實並非如此。當我運行另一個程序時,我得到了垃圾值。

# include <stdio.h> 

int main() 
{ 
    int i; 

    printf("%d", i); 
} 

我的問題是,這兩個平臺之間有一些區別還是我只是隨機性的受害者?

+0

垃圾收集標記不符合主題。閱讀http://gchandbook.org/瞭解更多關於GC的信息 –

回答

1

有兩個平臺

當然也有許多差異之間存在差異。你不能爲另一個編譯一個可執行文件,所以這應該是顯而易見的。即使你在x86平臺上運行,也是如此。如果您在x86和Solaris上運行Linux,則SPARC硬件上的差異會更大。

無論如何,讀取未初始化的變量是未定義的行爲。請參閱(Why) is using an uninitialized variable undefined behavior?