2017-04-13 57 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?