程序的内存模型

news2024/11/28 14:32:38

师从黑马程序员

内存分区模型

内存大方向划分为4个区域

1、代码区:存放函数体的二进制代码,由操作系统管理的

2、全局区:存放全局变量环和静态变量以及常量

3、栈区:由编译器自动分配释放,存放函数的参数值,局部变量等

4、堆区:由程序员分配和释放,若程序员不释放,程序结束时,由 操作系统回收

程序执行前

在程序编译后,生成了exe可执行文件,未执行该程序前分为两个区域:

代码区

存放CPU执行的机械指令(就是写的代码)

代码区是共享的,共享的目的是对于频繁被执行的程序,只需要在内存中有一份代码即可

代码区是只读的,使其只读的原因是防止程序意外地修改了它的指令

全局区

全局变量,静态变量(static关键字),字符串常量,const修饰的全局变量(全局常量)

该区域的数据在程序结束后由操作系统释放

注:不在全局区的有局部变量,const修饰的局部变量(局部常量)

程序运行后

栈区

由编译器自动分配释放,存放函数的参数值,局部变量等

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

#include <iostream>
using namespace std;

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

int *func()
{
    int a=10;//局部变量  存放在栈区,栈区的数据在函数执行完后自动释放
    return &a;//返回局部变量的地址
}



int main()
{
    //接受func函数的返回值
    int *p=func();

    cout<<*p<<endl;
   
    return 0;
}

输出结果

堆区

由程序员分配释放,若程序员不释放,程序结束时,由操作系统回收

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

#include <iostream>
using namespace std;

int *func()
{
    //利用new关键字  可以将数据开辟到堆区
    //指针  本质也是局部变量。放到栈上,指针保存的数据是放在堆区
    int *p=new int (10);
    return p;
}

int main()
{
    // 在堆区开辟数据
    int *p=func();
    cout<<*p<<endl;
    return 0;
}

注:利用new关键字可以创建堆区的数据。数据创建好之后,并不是把数据本身返回给你,而是把堆区创建数据的地址返回给你,所以用指针接收这个地址

new操作符

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

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

语法: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;
    //堆区的数据 由程序员管理开除,程序员管理释放
    //如果想释放堆区的数据,利用关键字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;
}

输出结果

若有侵权,请联系作者

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1425430.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【笔试常见易错选择题01】else、表达式、二维数组、%m.ns、%m.nf、常量指针和指针常量、宏定义、传参、数组越界、位段

1. 下列main()函数执行后的结果为&#xff08;&#xff09; int func(){ int i, j, k 0; for(i 0, j -1;j 0;i, j){ k; } return k; } int main(){cout << (func());return 0; }A. -1 B. 0 C. 1 D. 2 判断为赋值语句&#xff0c;j等于0 0为假不进循环 选B. 2. 下面程…

市场复盘总结 20240201

仅用于记录当天的市场情况&#xff0c;用于统计交易策略的适用情况&#xff0c;以便程序回测 短线核心&#xff1a;不参与任何级别的调整&#xff0c;采用龙空龙模式 一支股票 10%的时候可以操作&#xff0c; 90%的时间适合空仓等待 昨日主题投资 连板进级率 6/27 22.2% 二进…

LeetCode刷题:100.相同的树

题目&#xff1a; 解题思路&#xff1a;1.首先要判断根节点的情况&#xff0c;&#xff08;1&#xff09;首先是p为空&#xff0c;q不为空&#xff0c;或者p不为空&#xff0c;q为空则要返回false&#xff08;2&#xff09;p和q都为空则返回true&#xff0c;2.然后判断根节点的…

五、CPU针脚

电脑的两大厂商是Intel、AMD&#xff0c;区分他们两家的CPU&#xff0c;最简单的就是看CPU的针脚。 从形状上也大致能够看出来&#xff0c;AMD的logo占满了CPU的框框&#xff0c;Intel的是没有占满的。 CPU针脚针脚是什么呢&#xff1f; 如下&#xff0c;这一个个和小针一样的东…

【数据结构】 归并排序超详解

1.基本思想 归并排序&#xff08;MERGE-SORT&#xff09;是建立在归并操作上的一种有效的排序算法,该算法是采用分治法&#xff08;Divide andConquer&#xff09;的一个非常典型的应用。 将已有序的子序列合并&#xff0c;得到完全有序的序列&#xff0c;即先使每个子序列有序…

【操作系统·考研】文件系统

1.概述 文件系统(File System)提供高效和便捷的磁盘访问&#xff0c;以便允许存储、定位、提取数据。 严格来说&#xff0c;VFS并不是一种实际的FS&#xff0c;它只存在于内存中&#xff0c;不存在与任何外存空间中。 VFS在系统启动时建立&#xff0c;在系统关闭时消亡。 2.结…

Mask-Free Video Instance Segmentation

论文地址&#xff1a;[2303.15904] 无掩码视频实例分割 (arxiv.org) 论文代码&#xff1a;https://github.com/SysCV/MaskFreeVis 目录 一、摘要 二、介绍 三、方法 3.1 时间掩码一致性 3.2 时间KNN-patch Loss 3.3 训练MaskFreeVIS 四. 数据集 五.消融实验 六. 结果 七…

统计图表在线配置服务-百度 SugarBI的学习笔记

最近&#xff0c;有个产品要支持统计图表在线可配置&#xff0c;这样&#xff0c;当用户有新增统计指标的需求时&#xff0c;运维人员通过界面化配置&#xff0c;就可以增加统计指标了&#xff0c;不用开发写代码&#xff0c;画页面了。 上网查了下相关的组件&#xff0c;感觉…

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之TextClock组件

鸿蒙&#xff08;HarmonyOS&#xff09;项目方舟框架&#xff08;ArkUI&#xff09;之TextClock组件 一、操作环境 操作系统: Windows 10 专业版、IDE:DevEco Studio 3.1、SDK:HarmonyOS 3.1 二、TextClock组件 TextClock组件通过文本将当前系统时间显示在设备上。支持不同…

推荐几款便宜雾锁王国(Enshrouded)游戏联机服务器

雾锁王国(Enshrouded)是一款多人在线游戏&#xff0c;为了获得更好的游戏体验&#xff0c;许多玩家会选择自行搭建游戏联机服务器&#xff0c;但是如何挑选价格合适、性能稳定的服务器成为一个难题&#xff0c;本文将为大家推荐几款便宜雾锁王国(Enshrouded)游戏联机服务器。 一…

【大厂AI课学习笔记】1.3 人工智能产业发展(4)——泛在的人工智能

人工智能走向泛在。 泛在&#xff0c;就是广泛存在。&#xff08;下图来自腾讯AI课。&#xff09; 没办法&#xff0c;被百度抛弃了&#xff0c;想学习&#xff0c;课程打不开&#xff0c;只好投想腾讯的怀抱。 之前考过腾讯云的认证&#xff0c;课程做的还是条理很清晰。 主…

【gRPC】Python建立服务端含接口映射

续之前《【gRPC】protoc文件转py文件》 基于之前的目录结构&#xff0c;微调下&#xff1a; |- example # 新增|- service|- api|- User.py|- configs.py |- example_proto|- core|- user.proto |- proto_output|- core # 续上文转化后的结果|- user_pb2.py|- user_pb2.pyi…

CANoe学习笔记——窗口类型

CANoe中的窗口类型&#xff0c;共分为三种 1&#xff1a;MDI windows 2&#xff1a;Standard Windows 3&#xff1a;Docking Windows 窗口有多种类型&#xff0c;每种类型都定义了特定的窗口行为。通过点击窗口顶部的区域&#xff0c;可以更改窗口类型。 如下图&#xff0…

缓存击穿,商详页进不去了!!!

故事 对于小猫来讲&#xff0c;最近的一段日子是不好过的&#xff0c;纵使听着再有节拍的音乐&#xff0c;也换不起他对生活的热情。由于上一次“幂等事件”躺枪&#xff0c;他已经有几天没有休息好了。他感觉人生到了低谷。 当接手这个商城项目之后&#xff0c;他感觉他一直没…

【ChatGPT】文本向量化与余弦相似度:揭开文本处理的神秘面纱(5)

1、引言 在这个数字化的时代&#xff0c;我们每天都会面对大量的文本信息&#xff0c;从社交媒体到新闻报道&#xff0c;文本无处不在。但是&#xff0c;计算机要如何理解和处理这些文字呢&#xff1f;本文将为大家揭开其中的一些奥秘&#xff0c;详细解释文本向量化的概念&am…

构建中国人自己的私人GPT—支持中文

上一篇已经讲解了如何构建自己的私人GPT&#xff0c;这一篇主要讲如何让GPT支持中文。 privateGPT 本地部署目前只支持基于llama.cpp 的 gguf格式模型&#xff0c;GGUF 是 llama.cpp 团队于 2023 年 8 月 21 日推出的一种新格式。它是 GGML 的替代品&#xff0c;llama.cpp 不再…

【Java程序设计】【C00209】基于SSM个人求职管理系统(论文+PPT)

基于SSM个人求职管理系统&#xff08;论文PPT&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目简介 这个一个基于SSM的个人求职管理系统&#xff0c;本系统共分为三种权限&#xff1a;管理员、普通管理员、用户 管理员&#xff1a;首页、个人中心、用户管理、管理…

免费使用支持离线部署使用的 txt2video 文本生成视频大模型(Text-to-Video-Synthesis Model)

免费使用支持离线部署使用的 txt2video 文本生成视频大模型(Text-to-Video-Synthesis Model)。 文本生成视频大模型(Text-to-Video-Synthesis Model)是一种基于深度学习技术的人工智能模型&#xff0c;它可以将自然语言文本描述转换为相应的视频。即通过输入文本描述&#xff…

【亿级数据专题】「分布式消息引擎」 盘点本年度我们探索服务的HA高可用解决方案

盘点本年度我们探索服务的HA高可用解决方案 前言介绍HA高可用高可用性评估可用性是平均故障间隔时间 HA技术架构的特性分析Master/Slave架构主从复制模式主从复制的特性分析 高可用案例RocketMQ的主从架构责任划分同步机制动态化RocketMQ高可用架构中有限状态机的转换 总结Mast…

十五届健康中国大会在京举行,1892本草茶助力健康中国2030

2024 年1 月26 日,人民日报健康客户端主办的第十五届健康中国论坛在北京人民日报健康客户端演播厅举行。 健康中国论坛作为我国医药卫生界以“健康中国”为主题的论坛中举办时间最早、影响最大、质量最高、权威性最强的会议之一,今年走过了第十五个年头,已成为各级党和政府、医…