2016 - 2024

感恩一路有你

全局变量存放在堆还是栈 全局变量是分配在栈上还是静态存储区?

浏览量:1121 时间:2021-03-11 11:47:47 作者:admin

全局变量是分配在栈上还是静态存储区?

在C/C中,内存分为五个区域:堆、堆栈、空闲存储、全局/静态存储和常量存储。堆栈:编译器在需要时分配的变量的存储区,不需要时自动清除。变量通常是局部变量、函数参数等。堆:new分配的内存块不是由编译器管理的,而是由我们的应用程序控制的。通常,new对应于delete。如果程序员不释放它,操作系统将在程序完成后自动回收它。空闲内存区:由malloc等分配的内存块。它与heap非常相似,但它以free结束其生命。全局存储区(static storage area):将全局变量和静态变量的存储放在一起。初始化的全局变量和静态变量在一个区域中,未初始化的全局变量和未初始化的静态变量在另一个相邻区域中。程序结束后,系统被释放。常量存储区:这是一个特殊的存储区,用于存储常量,不能修改。希望对你有所帮助

C语言,看看你如何放置全局变量和局部变量。如果将全局变量和局部变量放在一个代码文件中,则会发生冲突。所以不明显,我将编写一个C程序代码,如下图所示:

在这个C程序中,我在main函数外定义了一个全局变量para,并给出一个初始值1。在C程序的主函数中,我定义了一个变量para,它与主函数外的变量同名。

这里,C程序主函数外的变量的生命周期在整个代码中是有效的,而主函数的变量只在主函数中有效。

也就是说,当您在C程序的主函数中操作para变量时,实际上是在主函数中操作变量,而外部para变量的值仍然是1。在这个C程序中,main函数中的para变量隐藏了外部变量para。

因此,学生在学习C语言时,必须注意全局变量被同名局部变量覆盖的问题,还要了解变量的范围和生命周期。

C语言全局变量和局部变量会冲突吗?为什么?

堆区域:全局变量、静态变量、malloc函数。

堆栈区域:函数参数值,局部变量。

1. 堆栈—编译器自动分配和释放,例如存储函数参数值和局部变量值。

2. 堆由程序分配和释放。如果它没有在程序中发布,它可能会在程序结束时被系统回收,例如全局变量、静态变量、malloc函数。

全局变量存放在堆还是栈 全局变量存在堆还是栈里面 局部变量存在堆还是栈

版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。