服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C/C++ - C/C++中栈(stack)&堆(heap)详解及其作用介绍

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

2021-12-28 16:57我是小白呀 C/C++

这篇文章主要介绍了C/C++中栈(stack)&堆(heap)详解及其作用,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

概述

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

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

 

程序运行中的栈和堆

我们以一段代码来举例:

#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;
}

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

  • 栈区: 栈区是分配局部变量的空间, 处于相对较高的地址. 栈地址向下增长
  • 堆区: 用于分配程序媛申请的内存空间, 是向上增长的
  • 静态数据区: 分配静态变量, 全局变量的空间
  • 只读区: 分配常量和程序代码

 

堆和栈的差异

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

 

申请方式和回收方式

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

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

 

申请后系统的响应

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

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

 

申请效率比较

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

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

 

申请大小的限制

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

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

 

堆和栈中的存储内容

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

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

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

到此这篇关于C/C++中栈(stack)&堆(heap)详解及其作用介绍的文章就介绍到这了,更多相关C++栈(stack)&堆(heap)内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/weixin_46274168/article/details/117205280

延伸 · 阅读

精彩推荐
  • C/C++c/c++内存分配大小实例讲解

    c/c++内存分配大小实例讲解

    在本篇文章里小编给大家整理了一篇关于c/c++内存分配大小实例讲解内容,有需要的朋友们可以跟着学习参考下。...

    jihite5172022-02-22
  • C/C++c/c++实现获取域名的IP地址

    c/c++实现获取域名的IP地址

    本文给大家汇总介绍了使用c/c++实现获取域名的IP地址的几种方法以及这些方法的核心函数gethostbyname的详细用法,非常的实用,有需要的小伙伴可以参考下...

    C++教程网10262021-03-16
  • C/C++OpenCV实现拼接图像的简单方法

    OpenCV实现拼接图像的简单方法

    这篇文章主要为大家详细介绍了OpenCV实现拼接图像的简单方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    iteye_183805102021-07-29
  • C/C++C语言main函数的三种形式实例详解

    C语言main函数的三种形式实例详解

    这篇文章主要介绍了 C语言main函数的三种形式实例详解的相关资料,需要的朋友可以参考下...

    ieearth6912021-05-16
  • C/C++C语言实现双人五子棋游戏

    C语言实现双人五子棋游戏

    这篇文章主要为大家详细介绍了C语言实现双人五子棋游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    两片空白7312021-11-12
  • C/C++深入C++拷贝构造函数的总结详解

    深入C++拷贝构造函数的总结详解

    本篇文章是对C++中拷贝构造函数进行了总结与介绍。需要的朋友参考下...

    C++教程网5182020-11-30
  • C/C++使用C++制作简单的web服务器(续)

    使用C++制作简单的web服务器(续)

    本文承接上文《使用C++制作简单的web服务器》,把web服务器做的功能稍微强大些,主要增加的功能是从文件中读取网页并返回给客户端,而不是把网页代码...

    C++教程网5492021-02-22
  • C/C++关于C语言中E-R图的详解

    关于C语言中E-R图的详解

    今天小编就为大家分享一篇关于关于C语言中E-R图的详解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看...

    Struggler095962021-07-12