C++中栈与堆数据存取情况

简介:本文通过一段简单的代码,帮助读者快速理解C++中栈和堆的数据存取情况。
演示代码

#include <iostream>
#include<cstdio>
using namespace std;

int a = 0;
static int b = 0;

int main()
{
    int Array[100000]; // 在很多编译器定义数组的时候 会默认给数组前端加上static 把数组放到
                  // 堆上面 因为栈内存可以顺序访问 很珍贵
                  // 堆理论上是无限的
    int c;
    int *p = new int (0);
    int *q = new int (100);
    char *s = "Hello";
    cout << &a << " " << &b << " " << &c << " " << &p << " " << p << endl;
    printf("%x\n",s);

    // 0x489008 0x489010 0x6afee8 0x6afee4 0xd810f8
    return 0;
}

// 栈 连续化数组 顺序栈
// 栈,堆,全局
// 栈,顺序栈,数组连续
// 堆,链式存储

首先是需要区分一下,栈和堆的区别:

  • 栈:内存条中的一片连续的存储空间,支持顺序读取,读取速度快,但是内存条中这样的连续存储空间很少,所以栈的资源稀少,适合存储一些需要时刻进行读取,而且所占内存较小的数据,比如int,double这些定义的变量。

  • 堆:内存条中的离散的存储空间,采取链式存储,读取速度慢,但是由于采取链式存储,所以理论上资源是无限的,适合存放很多占内存较大的数据结构,比如类,和很大的数组,在一些编译器中,当定义的数组非常大的时候,可能就会在编译的时候,默认给数组前面加上static关键字,让他存储在堆上面,扩大存储空间,static修饰的变量是静态全局变量,是存放在堆上面的,全局变量都是存放在堆上面的。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

极客李华

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值