August 2021
Intermediate to advanced
450 pages
9h 36m
Chinese
一个程序的计算或称为程序的执行,就是按照语言的规则逐条运行程序中的语句。当这个“执行线程”到达一个变量定义时,变量就会被创建,也就是说编译器会为它分配内存空间,并对其进行初始化。当变量退出其作用域时,将会被销毁,即,原则上它指向的对象会被删除,编译器可把它原来占用的内存作他用。例如:
像program_name和v这样的全局变量,在main()的第一条语句执行之前就会被初始化。其生存期直至程序结束,随后会被销毁。它们创建的顺序与定义的顺序相符(program_name先于v创建),而销毁则按相反的次序(v先于program_name销毁)。
当有代码调用f()时,首先会创建s,并将其初始化为空字符串,s的生命期会持续到从f()返回的时刻。
每次进入while循环的循环体时,stripped和not_letters两个变量会被创建。由于stripped先于not_letters定义,因此它也先被创建。两个变量的生存期都是到本次循环步的结束为止,在循环条件重新求值之前被销毁,销毁顺序与创建顺序相反(也就是说not_letters先于stripped被销毁)。因此,如果我们在遇到字符串“quit”之前读入10个其他的字符串,stripped和not_letters将会被创建和销毁10次。
每次到达for循环时,i会被创建。每次退出for循环时,到达语句v.push_back(stripped);前,i会被销毁。
请注意,编译器是聪明的家伙,它们获准优化代码,只要得到的结果与我们的目的相符即可。特别是,编译器在分配/释放内存方面很聪明,不会不必要地频繁分配/释放内存。 ...