栈变量(局部变量)的生命周期
自己定义的局部变量被分配在栈上,而栈在用完时会被释放掉,所以局部变量的生命周期时临时的。 临时变量在被函数每一次定义、调用时都会被创建一次,在函数返回时就会被释放。每一次调用局部变量,都会在内存中重新分配,他的地址都会改变。
所以函数内的局部变量不能够再函数外使用,是无连接的。在我们实际编程时,如果要使用小块的临时空间,可以申请栈空间。
局部变量也叫做临时变量,因为给它定义的这个作用/使命,所以不能够在函数外使用。
堆变量(大块的局部变量)的生命周期
堆变量就是malloc(及其类似的关键字)申请的变量。在我们实际编程时,如果要使用大块的临时空间,可以申请堆空间,用完释放。所以在一些代码中,使用堆内存都是不断地malloc和free的。在linux内核代码中,再用到大的结构体时,大部分都是malloc申请内存去照着结构体方法去用,用完之后free。下次在进入这个函数时,再去malloc和free。
从计算机的角度来看,堆内存空间是客观存在的,是有操作系统维护的,我们程序在调用时只是去申请用完后再去释放掉。跟我们申不申请没有关系,这段内存是一直在哪的,不会改变。就相当于图书馆的书籍,想要看的时候可以去借,不想看时,书也在图书馆放着,没有改变。
但是从我们使用者的角度来看,堆变量的生命周期时我们使用堆内存这段时间。我们这里讨论的时从我们申请到释放所占用的时间。在我们使用malloc申请变量时诞生,使用完之后,free将它释放后消亡。在