【发布时间】:2018-06-27 22:27:58
【问题描述】:
在this 网站上有以下段落(强调我的):
- 自动存储持续时间。当进入声明对象的块时分配存储,并在以任何方式退出时(转到、返回、到达末尾)释放存储。一个例外是 VLA。它们的存储是在声明执行时分配的,而不是在块入口时分配的,并且在声明超出范围时被释放,而不是在块退出时(C99 起)。如果以递归方式进入块,则为每个递归级别执行新的分配。所有函数参数和非静态块作用域对象都具有此存储持续时间,以及在块作用域中使用的复合字面量。
声明超出范围和退出块有什么区别?可以举个例子吗?
【问题讨论】:
-
en.cppreference.com/w/c/language/array 请参阅有关可变长度数组的部分。它有一个很好的例子。
-
@DeiDei 我读了那个例子,它没有具体说明两者之间的区别。我只能认为在块的末尾有一条特殊指令,负责为 VLA 取消分配内存。因此,如果使用
return或goto退出块,则不会释放内存。这是正确的吗? -
基本上这是所有意大利面条编码员的注意事项。如果你写的是理智的代码,你就不需要关心这个。