㈠ 函数里的局部变量在函数退出后会不会自动释放
会自动释放,指针也是一样的。
局部变量的作用域是定义该变量的函数或定义该变量的复合语句。只在定义它的函数或复合语句范围内有效,只能在定义它的函数或复合语句内才能使用它们。局部变量的生存期是从函数被调用的时刻算起到函数返回调用处的时刻结束。
(1)栈上的数据什么时候被释放扩展阅读:
局部变量的作用域说明:
1、主函数main()中定义的变量也只在主函数中有效,而不能因为在主函数中定义在整个文件或程序中有效。主函数也不能使用其他函数中定义的变量。因为主函数也是一个函数,它与其他函数是平行关系。这一点是与其他语言不同的,应予以注意。
2、不同函数中可以使用相同名字的变量,它们代表不同的对象,分配不同的单元,互不干扰。例如,上面在f1函数中定义了变量b和c,倘若在f2函数中也定义变量b和c,它们在内存中占不同的单元,互不干扰。
3、形式参数是属于被调函数的局部变量。例如上面f1函数中的形参a,也只在f1函数中有效,其他函数可以调用f1函数,但不能引用f1函数中的形参a。
4、在一个函数内部,可以在复合语句中定义变量,这些变量只在本复合语句中有效,这种复合语句也称为“分程序”或“程序块”。
㈡ java栈内存中创建的引用所占用的内存什么时候释放
运行完method1()方法后。str引用内存释放!
㈢ c++递归栈释放规则
c++递归栈释放规则是:
最后调用的栈空间(包括数据空间和其它压栈信息占用的空间),最先释放。
㈣ c++函数执行结束后,会自动释放栈上的空间,即存放hello world的单元可能被重新写入数据
释放不是说清空。这是你理解错误。
声明一个变量或者常量的时候如果你没有赋值,并不是说哪块内存区域就是空的(或者全零)。此时只是声明这块区域用来存放。并把这块区域标识为已分配。
当你释放的时候他也不会去删除那块区域的内存的数据。只是把这块区域标识为未使用,可供使用。
没有“清空”这个概念,只是释放。内存释放后数据任然存在。你用一个相符类型的指针指向被释放的地址,当该地址的数据还未被其他程序改写,当然是可以读取释放前的数据。
你可以把这个做成循环输出 p的值。然后启动一个大型程序。很快你就会看到p的输出会发生变化。