如何在c中为无符号短路分配内存

时间:2013-06-18 15:12:18

标签: c variables memory-management

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? */
        }
    }
}

Alphabet的大小是多少?

1 个答案:

答案 0 :(得分:0)

Alphabet是一个包含10个unsigned short元素的数组。它的大小为10 * sizeof (unsigned short),其中sizeof (unsigned short)通常为2,但它可能因不同的实现而有所不同。

在标准使用的术语中,Alphabet具有自动存储持续时间。这意味着它是在进入最里面的包含块时创建的(在这种情况下,由最近的{}分隔)并且在从该块退出时不再存在。 (通常它会在"堆栈"上分配,但语言标准实际上并没有使用该术语,而某些编译器可能会使用不同的策略。)

当我说它不再存在时,我并不意味着必须清除或弹出堆栈。这只是意味着您不再允许尝试访问它。 (您可以尝试通过保存指向对象的指针并在块外部取消引用它来执行此操作;如果这样做,则代码的行为未定义。)

基本上,Alphabet仅在最内层的封闭块执行时才存在。编译器可以以任何方式实现它。在调用函数时发生实际分配是常见的,并且在函数返回时弹出堆栈,但概念上Alphabet在块的末尾不再存在,即使内存也是如此还没有被明确解除分配。