一,定义
堆被称为动态内存,由堆管理器管理,程序中可以使用malloc函数来(向堆管理器)申请分配堆内存,使用完后使用free函数释放。堆内存的特点是:在程序运行过程中才申请分配,在程序运行中即释放(因此称为动态内存分配技术)。
栈是C语言使用的一种内存自动分配技术(注意是自动),自动指的是栈内存操作不用C程序员干预,而是自动分配自动回收的。C语言中局部变量就分配在栈上,进入函数时局部变量需要的内存自动分配,函数结束退出时局部变量对应的内存自动释放。
堆栈这个词不存在的。堆就是堆(heap),栈就是栈(stack),根本没有另外一种内存管理机制叫堆栈。大多数时候有人说起堆栈,其实他想说的是栈,以前早些的时候,这方面的命名并不是特别准确。
二,堆栈溢出原因:堆栈溢出一般都是由堆栈越界访问导致的。
例如函数内局部变量数组越界访问,或者函数内局部变量使用过多,超出了操作系统为该进程分配的栈的大小也会导致堆栈溢出。
既然堆和栈都是用来管理内存的机制,使用时就有一定的规则。无视规则的错误使用。
&nb

本文详细解析了堆和栈在内存管理中的角色,包括它们的定义、使用规则及常见错误,如内存泄漏和溢出。并提供了避免这些问题的策略。
最低0.47元/天 解锁文章
2114





