我就喜欢讨论这些概念性的问题。有关分配和释放的时机问题,C99 标准只字未提:
6.2.4 Storage durations of objects
2 The lifetime of an object is the portion of program execution during which storage is
guaranteed to be reserved for it. An object exists, has a constant address, and retains
its last-stored value throughout its lifetime. If an object is referred to outside of its
lifetime, the behavior is undefined....
翻译:
6.2.4 对象的储存期
2 对象的生命期是指期其储存空间被保证保留的程序执行过程部分。一个对象存在,占有一个
固定的地址,并在整个生命期内维护它最后的存储值。在生命期外引用一个对象是未定义行为。
之后标准用了一些篇幅,诠释各个对象的生命期是什么。
注意标准的用语,生命期是保证对象储存空间存在的时期。也就是说,对象可以在生命期开始的那一刹那分配,在消失的那一刹那回收。也可以不是,但储存的只能比这个长,不能比这个短。
事实上现在一般的实现,在执行权转入函数时统一分配局部变量,转回时统一回收都是符合标准的做法。当然也可以有其它做法,不过一般都要权衡相应行为代价。
[
本帖最后由 pangding 于 2012-8-10 22:55 编辑 ]