首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >C++中栈与堆数据存取情况

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

作者头像
GeekLiHua
发布2025-01-21 14:49:00
发布2025-01-21 14:49:00
1550
举报
文章被收录于专栏:JavaJava

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

代码语言:javascript
复制
#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修饰的变量是静态全局变量,是存放在堆上面的,全局变量都是存放在堆上面的。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-11-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档