首页 > 编程语言 >【C++】堆栈的使用 | 堆栈的大小 | 动静态分配问题

【C++】堆栈的使用 | 堆栈的大小 | 动静态分配问题

时间:2024-12-08 19:29:06浏览次数:10  
标签:静态 动态分配 空间 编译器 C++ 堆栈 分配 内存

栈和堆的使用:
1.栈区先定义的变量放到栈底,地址高,后定义的变量放到栈顶,地址低,因此是向下生长的,堆区则相反
2.栈区主要存在局部变量和函数参数,其空间的管理由编译器自动完成,无需手动控制,堆区是自己申请的空间,在不需 要时需要手动释放
3.频繁的申请空间和释放空间,容易造成内存碎片,甚至内存泄漏,栈区由于是自动管理,不存在此问题
栈和堆的大小问题:
1.堆内存的大小仅取决于操作系统(看操作系统把多少内存给堆)。栈内存的空间一般很小,由系统直接分配
2.32位系统下,最大的访问内存空间为4G,(232-1个地址为4G)所以不可能把所有的内存空间当做堆内存使用,只给堆一部分使用
动静态分配:
动态分配:动态分配指的是程序执行过程中动态地分配或者回收存储空间的分配内存的方法
静态分配:静态分配是编译器完成的,比如局部变量的分配。(在编译阶段就完成了)
动静态分配的不同:
1.时间:静态分配发生在程序编译和链接的时候。动态分配发生在程序调入和执行的时候
2.空间:
  1.堆都是动态分配的,没有静态分配的堆
  2.栈有两种分配方式:静态分配和动态分配。静态分配是编译器完成的,比如局部变量的分配。动态分配可调用_alloc()这个函数动态申请栈内存。但是_alloc()函数申请的栈空间不能用free或者delete进行释放!因为栈的动态分配由编译器释放,无需我们手动实现!

标签:静态,动态分配,空间,编译器,C++,堆栈,分配,内存
From: https://blog.csdn.net/iiiiiankor/article/details/144330137

相关文章

  • QT 6.8.0 QML 随笔 调用C++类
    1、开发环境QtCreator、QT6.8.0、CMake。2、添加新文件。3、 在头文件中定义一个intAdd(inta,intb);方法publicslots:intAdd(inta,intb);4、类文件.cpp中实现方法。#include"MyApp.h"#include<QDebug>intMyApp::Add(inta,intb){qDebug()<<a+......
  • C语言动态哆啦A梦源码分享,无需编程基础,小白轻松运行,顺便解决Visual Studio 2022里c++
    下面是运行效果图:首先是安装VisualStudio2022VisualStudio2022IDE-适用于软件开发人员的编程工具打开上面的网址,选择下载社区版 下载好后运行,进来以后,如果是初次安装需要下载安装,我的是原来就有的所以会显示更新,如果原来就有的请点击修改按钮,选择配置下载并安装......
  • 【多态】—— 我与C++的不解之缘(二十)
    前言面向对象语言的三大特性:封装、继承和多态。现在就一起来学习多态一、什么是多态通俗一点,多态就是多种形态;多态它又分为编译时动态和运行时多态。1.编译时多态​编译时多态,主要就是函数重载和函数模板,他们传不同的参数就可以调用不同的函数,通过传参不同达到......
  • 浅谈C/C++内存管理
    目录一、C语言和C++内存管理方式        1、C语言和C++内存管理方式区别     2、【new】和【delete】的好处二、使用【new】来分配内存三、使用【new】来创建动态数组    1、创建动态数组        2、使用动态数组 四、使用【delete......
  • vc++6.0与新版编译器多了哪些注意事项(1)
    VC6++,这是一个比较老的编译器了,对C++标准支持存在一些局限性,一.关于warningC4003:notenoughactualparametersformacro'getc'警告及相关错误原因分析:在C语言的标准库中有一个名为getc的宏(通常用于从文件流中读取字符等操作),代码里定义了名为getc的类point的......
  • 打卡信奥刷题(382)用C++信奥B3693[普及组/提高] 数列前缀和 4
    数列前缀和4题目背景这次不是数列的问题了。题目描述给定一个nnn行mm......
  • 【C++算法】33.位运算_判定字符是否唯一
    文章目录题目链接:题目描述:解法C++算法代码:图解题目链接:面试题01.01.判定字符是否唯一题目描述:解法如果使用数据结构的话哈希表:一个一个字符扫描,不在哈希表里面的就放进去,在里面的就返回false。扫描完全部不重复就返回true。也可以优化一下,字母一共26......
  • 【C++算法】34.位运算_丢失的数字
    文章目录题目链接:题目描述:解法C++算法代码:题目链接:268.丢失的数字题目描述:解法哈希表创建一个0~5的数组从前往后遍历一下,有的数字就在表里面标记一下,最后看一下哪些数字没有被标记过。高斯求和先求出应该有的和:(首项+末项)*项数÷2然后减去数组的和......
  • 关于c++的一个报错
    使用tstring构造函数,用到了VarBaseString的tostring,调用完,会导致局部对象指针为nullptr,目前在查原因classVarBaseString:publicVar{public:VarBaseString(std::stringstr=""){val=str;type="string";......
  • 斐波那契数列c++
    意大利数学家斐波那契(LeonardoFibonacci)是12、13世纪欧洲数学界的代表人物。他提出的“兔子问题”引起了后人的极大兴趣。“兔子问题”假定一对大兔子每一个月可以生一对小兔子,而小兔子出生后两个月就有繁殖能力,问从一对小兔子开始,n个月后能繁殖成多少对兔子?输入格式:首先......