广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C++程序内存栈区与堆区模型案例分析
  • 129
分享到

C++程序内存栈区与堆区模型案例分析

2024-04-02 19:04:59 129人浏览 薄情痞子
摘要

目录栈区:栈区代码演示:堆区:堆区代码演示:new操作符:new操作符代码演示:栈区: 由编译器自动分配释放,存放函数的参数值,局部变量等(由编译器管理其“生死&rdqu

栈区:

由编译器自动分配释放,存放函数的参数值,局部变量等(由编译器管理其“生死”)

注意事项:不要返回局部变量的地址,栈区开辟的数据由编译器自动释放

栈区代码演示:

//内存四区-栈区

#include <iOStream>
using namespace std;
 
//栈区数据注意事项 --- 不要返回局部变量的地址
//栈区数据由编译器管理开辟和释放
 
int * func(int b) //形参数据也会放到栈区
{
    b = 100;
    int a = 10; //局部变量 存放在栈区,栈区的数据在函数执行完后自动释放,当此函数执行完,栈上的数据就清空了
    retern &a;  //返回局部变量的地址
}
int main() {
 
    //接受func函数的返回值
    int * p = finc(1);
    cout << *p << endl; //第一次可以打印正确的数字,是因为编译器做了一次保留
    cout << *p << endl; //第二次这个数据就不再保留了
 
    return 0;
}

堆区:

程序员分配释放,若程序员不释放,程序结束后由操作系统回收(运行期间你不管,它就不释放。运行结束就给他回收掉)

c++中主要利用new在堆区开辟内存

堆区代码演示:


#include <iostream>
using namespace std;
 
int * func()
{
    //利用new关键字 可以将数据开辟到堆区
    //指针本质也是局部变量,放在栈上,指针保存的数据是放在堆区
    int * p = new int (10); //用指针去接收这块内存,new创建这块内存,把地址返回给你
    return p;
}
int main() {
    //在堆区开辟数据
    int *p = func();
    
    cout << *p << endl;
    cout << *p << endl;
    cout << *p << endl;
    cout << *p << endl; //一直存活
    
    return 0;
}

new操作符:

C++中利用new操作符在堆区开辟数据

堆区开辟数据,由程序员手动开辟,手动释放,释放利用操作符delete

语法:new 数据类型

利用new创建的数据,会返回该数据对应的类型的指针

new操作符代码演示:

#include <iostream>
using namespace std;
 
//1、new的基本语法
int * func()
{
    //在堆区创建整型数据
    //new返回的是:该数据类型的指针
    int * p = new int(10);
    return p;
}
 
void test01()
{
    int * p = func();
    cout << *p << endl;
    cout << *p << endl;
    cout << *p << endl;
    //堆区的数据由程序员管理开辟,程序员管理释放
    //如果想释放堆区的数据,利用关键字delete
    delete p;
    cout << *p << endl; //此处程序报错:内存已经释放,再去访问就是非法操作
}
 
//2、在堆区利用new开辟数组
void test02()
{
    //创建10整型数据的数组,在堆区
    int * arr = new int [10]; //10代表数组有10个元素
    for(int i=0;i<10;i++)
    {
        arr[i]=i+100;//给10个元素赋值100~109
 
    }
    for(int i=0;i<10;i++)
    {
        cout<<arr[i]<<endl;
    }
    //释放堆区数组
    //释放数组的时候,要加一个[]才可以
    delete[] arr;
}
int main() {
    //test01();
    test02();
 
 
    return 0;
}

到此这篇关于C++程序内存栈区与堆区模型案例分析的文章就介绍到这了,更多相关C++ 内存分区内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: C++程序内存栈区与堆区模型案例分析

本文链接: https://www.lsjlt.com/news/144370.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C++程序内存栈区与堆区模型案例分析
    目录栈区:栈区代码演示:堆区:堆区代码演示:new操作符:new操作符代码演示:栈区: 由编译器自动分配释放,存放函数的参数值,局部变量等(由编译器管理其“生死&rdqu...
    99+
    2022-11-13
  • C++ 内存分区模型的使用(代码区、全局区、栈区、堆区、new)
    目录内存分区模型1 代码区2 全局区3 栈区4 堆区5 new运算符参考: 内存分区模型 1 代码区 2 全局区 // 全局变量、静态变量、常量 #include &l...
    99+
    2022-11-12
  • C++浅析内存分区模型概念与示例
    目录初识C++内存分区模型程序运行前内存分区代码示例初识C++内存分区模型 在了解内存分区之前,我们先来聊一聊为什么要进行内存分区。在进行了内存分区之后,在不同的区域存放的数据,会有...
    99+
    2022-11-13
  • C++程序的五大内存分区实例详解
    目录1、栈内存区1.1、调用函数时通过栈来传递函数的参数值       1.2、线程占用的栈内存是有上限的2、堆内存区3、全局/静态内存区4、...
    99+
    2022-11-12
  • Java并发编程之volatile与JMM多线程内存模型实例分析
    本篇内容主要讲解“Java并发编程之volatile与JMM多线程内存模型实例分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java并发编程之volatile与JMM多线程内存模型实例分析”...
    99+
    2023-06-30
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作