【C语言】栈内存与堆内存的区别,使用堆内存需要注意的问题

栈内存:
优点:自动申请、自动释放,使用方便,并且能与标识符建立联系使用方便,由于操作系统算法比较完善,因此不会产生内存碎 片、内存泄漏的问题。 先进后出的特殊为函数的调用提供以及递归支持。安全、方便
缺点:大小有限,不适合存储大量数据;当函数结束时栈内存就会被释放, 不适合长期存储数据。

堆内存:
优点:存储空间够大,适合存储大批量的数据,申请和释放是受管理员控制的,适合长期保存数据。 还可以根据程序的实际需要来调整内存的大小。
缺点:需要手动申请释放,使用麻烦;不能与标识符建立联系,只能和指针配合使用。安全性差;在使用过程中可能会造成内存泄漏、产生内存碎片,对编程人员要求高。

使用堆内存要注意哪些问题:
1、内存越界
由于申请时的内存大小计算错误,而导致内存越界。
会导致段错误、脏数据(数据丢失受破坏)
2、内存泄漏
在程序运行期间,内存的首地址丢失,造成内存无法再内存期间释放,或者重复申请,而导致可用内存越来越少。
3、内存碎片
如果频繁的申请、释放小块的内存可能会造成申请和释放的不协调,而导致已经释放的内存无法使用。
4、重复释放
指针操作失误、业务流程出现漏洞导致同一块内存多次释放。 可能造成段错误。
5、产生野指针
释放完内存后指向他的指针要及时设置为空,否则就会产生野指针,埋下安全隐患。

你可能感兴趣的:(【C语言】栈内存与堆内存的区别,使用堆内存需要注意的问题)