亲宝软件园·资讯

展开

C++栈(stack)&堆(heap) C/C++中栈(stack)&堆(heap)详解及其作用介绍

我是小白呀 人气:0
想了解C/C++中栈(stack)&堆(heap)详解及其作用介绍的相关内容吗,我是小白呀在本文为您仔细讲解C++栈(stack)&堆(heap)的相关知识和一些Code实例,欢迎阅读和指正,我们先划重点:C++栈(stack)&堆(heap),C++栈,C++堆(heap),下面大家一起来学习吧。

概述

栈 (stack) 是为执行线程流出的内存空间. 堆 (head) 是为动态分配预留的空间.

在这里插入图片描述

程序运行中的栈和堆

我们以一段代码来举例:

#include <iostream>
using namespace std;

int a = 0;  // 全局初始化区
char *pt;  // 全局未初始化

int main() {
    int b; // b在栈区
    char s[] = "abc";  // s在栈区
    char *p1;  // 在栈区
    char *p2 = "123";  // "123"在常量区, p3在栈区
    static int c = 0;  // 全局静态初始化区
    char *p3 = new char(65);  // 在堆区
    char *p4 = new char[10];  // 在堆区

    return 0;
}

在这里插入图片描述

堆和栈的差异

在这里插入图片描述

申请方式和回收方式

栈: 栈上的空间是自动分配回收的. 生存周期只在函数的运行过程中, 运行后就释放.

堆: 程序媛根据需要自己申请的空间, 只要程序媛不释放空间, 就一直可以访问到. 一旦忘记释放会造成内存泄漏.

申请后系统的响应

栈: 只要栈的剩余空间大于所申请空间, 系统将为程序提供内存, 否则将报异常提示栈溢出. 响应速度快.

堆: 系统收到程序的申请时, 会遍历空闲内存地址的链表. 寻找第一个空间大于所申请空间的堆节点. 响应速度慢.

申请效率比较

栈: 由系统自动分配, 速度较快, 程序媛无法控制.

堆: 由 new 分配, 一般速度较慢, 而且容易产生内存碎片, 不过用起来最方便.

申请大小的限制

栈: 在 Windows 下, 栈的大小是 2MB. 如果申请的空间超过栈的剩余空间时, 将提示overflow
(栈溢出).

堆: 堆的大小受限于计算机系统中有效的虚拟内存. 堆获得的空间比较灵活, 也比较大.

堆和栈中的存储内容

栈: 函数调用语句的下一条可执行语句的地址, 函数的各个参数, 函数中的局部变量.

堆: 具体内容由程序媛, 我们安排.

注: 当有指针数据成员时, 必须用深复制, 使其使用堆区的空间.

加载全部内容

相关教程
猜你喜欢
用户评论