2013-06-18 24 views
-1
main() 
{ 
while(1) 
    { 
    if(j==7) 
     { 
     unsigned short Alphabet[10]; //what is size of this variable 
/* if i came out of this loop will the memory allocated be cleared? if not then how to clear it? */ 
     } 
    } 
} 

什么是字母的大小?如何存储在C被分配给无符号短

回答

0

Alphabet为10个unsigned short元素的数组。其大小为10 * sizeof (unsigned short),其中sizeof (unsigned short)通常为2,但对于不同的实现它可能会有所不同。

在标准使用的术语中,Alphabet自动存储时间。这意味着它是在进入最内层包含块(在这种情况下,由最接近的{}分隔)创建的,并且在从该块退出时不再存在。 (通常它将被分配在“堆栈”上,但语言标准实际上并不使用该术语,并且一些编译器可能使用不同的策略。)当我说它“不复存在”时,我并不意味着它是必然清除或弹出堆栈。这意味着你不再允许尝试访问它。 (您可以尝试通过保存一个指向对象的指针并在块外引用它;如果这样做,则代码的行为是未定义的。)

基本上,Alphabet仅在内部封闭块正在执行时才存在。编译器可以以任何喜欢的方式实现。调用函数时发生实际的分配以及在函数返回时弹出堆栈很常见,但即使内存未被显式释放,概念上Alphabet也不会在块的末尾存在。

+0

如果我这个代码创建.HEX文件,那么它如何影响.HEX file.Since IM编码的大小为微控制器,所以我希望我的代码,以在最短的大小和内存 – shafeeq

+0

的可执行文件的大小最有可能赢得”不会受到影响。编译器将生成在执行过程中为'Alphabet'分配内存的代码。如果它分配了20个字节,那么不会比分配10个字节多两倍。当然,它会影响程序运行时分配的内存量。确定内存使用情况的最佳方法是尝试并自行测量。 –

+0

我并不真的期望得到downvote的解释,但是如果您认为我的答案有问题,我会很感激您对如何改进的一些反馈。 –