当前位置: 首页 > news >正文

C++的内存四区

文章目录

  • 内存四区
  • 1.程序运行前
    • 1.1 代码区
    • 2.1 全局区
    • 2.2 示例
  • 2.程序运行后
    • 1.1 栈区
    • 1.2 堆区


内存四区

请添加图片描述


1.程序运行前

  在程序编译后,生成了exe可执行程序,未执行该程序前分为两个区域。该区域的数据在程序结束后由操作系统释放.

1.1 代码区

  • ​存放 CPU 执行的机器指令
  • ​代码区是共享的,共享的目的是对于频繁被执行的程序,只需要在内存中有一份代码即可
  • ​代码区是只读的,使其只读的原因是防止程序意外地修改了它的指令

2.1 全局区

  • ​全局变量和静态变量存放在此. ​
  • 全局区还包含了常量区, 字符串常量和其他常量也存放在此.

2.2 示例

#include <iostream>
#include <vector>
#include <string>
#include <cstdint>  // 包含 uintptr_t 的头文件
using namespace std;// 全局变量
int g_a = 10;
int g_b = 10;// 全局常量
const int c_g_a = 10;
const int c_g_b = 10;int main() {// 局部变量int a = 10;int b = 10;// 打印地址cout << "局部变量a地址为: " << (uintptr_t)&a << endl;cout << "局部变量b地址为: " << (uintptr_t)&b << endl;cout << "全局变量g_a地址为: " << (uintptr_t)&g_a << endl;cout << "全局变量g_b地址为: " << (uintptr_t)&g_b << endl;// 静态变量static int s_a = 10;static int s_b = 10;cout << "静态变量s_a地址为: " << (uintptr_t)&s_a << endl;cout << "静态变量s_b地址为: " << (uintptr_t)&s_b << endl;cout << "字符串常量地址为: " << (uintptr_t)"hello world" << endl;cout << "字符串常量地址为: " << (uintptr_t)"hello world1" << endl;cout << "全局常量c_g_a地址为: " << (uintptr_t)&c_g_a << endl;cout << "全局常量c_g_b地址为: " << (uintptr_t)&c_g_b << endl;const int c_l_a = 10;const int c_l_b = 10;cout << "局部常量c_l_a地址为: " << (uintptr_t)&c_l_a << endl;cout << "局部常量c_l_b地址为: " << (uintptr_t)&c_l_b << endl;// system("pause");return 0;
}
局部变量a地址为: 140729157773912
局部变量b地址为: 140729157773916
全局变量g_a地址为: 93857217380368
全局变量g_b地址为: 93857217380372
静态变量s_a地址为: 93857217380376
静态变量s_b地址为: 93857217380380
字符串常量地址为: 93857215278679
字符串常量地址为: 93857215278691
全局常量c_g_a地址为: 93857215278472
全局常量c_g_b地址为: 93857215278476
局部常量c_l_a地址为: 140729157773920
局部常量c_l_b地址为: 140729157773924

2.程序运行后

1.1 栈区

  • 由编译器自动分配释放, 存放函数的参数值,局部变量等
  • ​注意事项:不要返回局部变量的地址,栈区开辟的数据由编译器自动释放
int * func()
{int a = 10;//局部变量,存放在栈区,栈区的数据在函数执行完后自动释放return &a;//返回局部变量的地址
}int main() {//接受func函数的返回值int *p = func();cout << *p << endl;//第一次可以打印正确是因为编译器做了保留cout << *p << endl;//第二次就不保留了system("pause");return 0;
}

1.2 堆区

  • 由程序员分配释放,若程序员不释放,程序结束时由操作系统回收
  • ​在C++中主要利用new在堆区开辟内存,释放用delete。
int* func()
{//指针本质上是局部变量,放在栈上,指针保存的数据放在堆区int* a = new int(10);//利用new关键字将数据开辟到堆区return a;
}int main() {int *p = func();cout << *p << endl;cout << *p << endl;system("pause");return 0;
}

相关文章:

C++的内存四区

文章目录 内存四区1.程序运行前1.1 代码区2.1 全局区2.2 示例 2.程序运行后1.1 栈区1.2 堆区 内存四区 1.程序运行前 在程序编译后&#xff0c;生成了exe可执行程序&#xff0c;未执行该程序前分为两个区域。该区域的数据在程序结束后由操作系统释放. 1.1 代码区 ​存放 CPU …...

Java爬虫技术:按关键字搜索VIP商品详情

在数字化时代&#xff0c;电子商务平台的竞争日益激烈&#xff0c;而精准的数据采集和分析成为了企业获取竞争优势的关键。对于电商平台而言&#xff0c;能够根据用户输入的关键字快速搜索并展示VIP商品的详细信息&#xff0c;不仅能够提升用户体验&#xff0c;还能够增加销售机…...

C++ —— 模板类与函数

C —— 模板类与函数 模板类可以用于函数的参数和返回值&#xff0c;有三种形式&#xff1a; 普通函数&#xff0c;参数和返回值是模板类的实例化版本。函数模板&#xff0c;参数和返回值是某种的模板类。函数模板&#xff0c;参数和返回值是任意类型&#xff08;支持普通类和…...

【软考高级】系统架构设计师复习笔记-精华版

文章目录 前言0 系统架构设计师0.1 考架构还是考系分0.2 架构核心知识0.3 架构教材变化 1 计算机操作系统1.1 cpu 组成1.2 内核的五大功能1.3 流水线技术1.4 段页式存储1.5 I/O 软件1.6 文件管理1.7 系统工程相关 2 嵌入式2.1 嵌入式技术2.2 板级支持包&#xff08;BSP&#xf…...

免费 IP 归属地接口

免费GEOIP&#xff0c;查询IP信息&#xff0c;支持IPV4 IPV6 ,包含国家地理位置&#xff0c;维度&#xff0c;asm,邮编 等&#xff0c;例如 例如查询1.1.1.1 http://geoip.91hu.top/?ip1.1.1.1 返回json 对象...

AIA - IMSIC之二(附IMSIC处理流程图)

本文属于《 RISC-V指令集基础系列教程》之一,欢迎查看其它文章。 1 ​​​​​​​通过IMSIC接收外部中断的CSR 软件通过《AIA - 新增的CSR》描述的CSR来访问IMSIC。 machine level 的 CSR 与 IMSIC 的 machine level interrupt file 可相互互动;而 supervisor level 的 CSR…...

数据处理之数据规约

数据处理之数据规约 1. 数据规约概述 数据规约是数据处理中的重要方法&#xff0c;旨在让数据处理更简便、高效&#xff0c;以满足业务需求。当从数据仓库获取的数据量庞大时&#xff0c;直接在海量数据上进行分析和挖掘成本颇高。数据规约可得到数据集的归约表示&#xff0c…...

爬虫代理服务要怎么挑选?

在数据采集的世界里&#xff0c;爬虫代理服务不仅帮助我们高效地收集信息&#xff0c;还能在保护数据安全方面发挥重要作用。但面对市场上琳琅满目的代理服务&#xff0c;我们该如何挑选呢&#xff1f;本文将为你提供一些实用的建议&#xff0c;帮助你找到最适合你的爬虫代理服…...

vue3组件调用解决奇怪问题的详细记录

左边是父组件&#xff0c;右边是子组件&#xff0c;运行正常&#xff1a; 父组件中的子组件加上class属性&#xff0c;运行报错&#xff1a;Extraneous non-props attributes (class) were passed to component but could not be automatically inherited because component re…...

【物联网技术与应用】实验16:模拟霍尔传感器实验

实验16 模拟霍尔传感器实验 【实验介绍】 基于霍尔效应&#xff0c;霍尔传感器是响应于磁场而改变其输出电压的传感器。霍尔传感器用于接近开关&#xff0c;定位&#xff0c;速度检测和电流检测应用。 霍尔传感器可以分为模拟霍尔传感器和开关霍尔传感器由电压调节器&#x…...

【机器学习案列】车牌自动识别系统:基于YOLO11的高效实现

&#x1f9d1; 博主简介&#xff1a;曾任某智慧城市类企业算法总监&#xff0c;目前在美国市场的物流公司从事高级算法工程师一职&#xff0c;深耕人工智能领域&#xff0c;精通python数据挖掘、可视化、机器学习等&#xff0c;发表过AI相关的专利并多次在AI类比赛中获奖。CSDN…...

高精度问题

目录 算法实现基础 高精度加法AB 测试链接 源代码 代码重点 高精度减法A-B 测试链接 源代码 代码重点 高精度乘法A*b和A*B 测试链接 源代码 代码重点 高精度除法A/b和A/B 测试链接 源代码 代码重点 高精度求和差积商余 算法实现基础 本算法调用STL…...

kong网关使用pre-function插件,改写接口的返回数据

一、背景 kong作为api网关&#xff0c;除了反向代理后端服务外&#xff0c;还可对接口进行预处理。 比如本文提及的一个小功能&#xff0c;根据http header某个字段的值&#xff0c;等于多少的时候&#xff0c;返回一个固定的报文。 使用到的kong插件是pre-function。 除了上…...

【QT开发自制小工具】PDF/图片转excel---调用百度OCR API接口

前言 前几年WPS还可以免费处理5页以内的PDF转excel&#xff0c;现在必须付费了&#xff0c;而且百度其他在线的PDF转excel都是要收费的&#xff0c;刚好前几年调研过百度OCR的高精度含位置接口&#xff0c;依然是每天可以免费调用50次&#xff0c;本篇是基于此接口&#xff0c;…...

vue2 elementui if导致的rules判断失效

优化目标 和 目标转化出价必填的 切换的时候还会隐藏掉 这时候的if语句会导致rules判断失效 我的办法是把判断拉到外面 别放在el-form-item里 <section v-if"unitForm.baseTarget OCPM && unitForm.cpaTargetOptions ! undefined && unitForm.cpaTa…...

DevOps实战:用Kubernetes和Argo打造自动化CI/CD流程(2)

DevOps实战&#xff1a;用Kubernetes和Argo打造自动化CI/CD流程&#xff08;2&#xff09; 背景 架构图 正片开始之前&#xff0c;请一定先熟悉上面的架构图&#xff0c;跟着我的步骤&#xff0c;一步一步执行成功&#xff0c;相信后续根据自己特定的需求定制CI/CD。 需求 …...

嵌入式科普(25)Home Assistant米家集成意味着IOT的核心是智能设备

目录 一、概述 二、一张图说尽HA 三、HA的相关资料 四、米家集成划重点 五、总结 一、概述 小米Home Assistant 米家集成开源一周star近15k&#xff0c;迭代4个版本&#xff0c;12个贡献者 本文科普一下Home Assistant&#xff08;简称HA&#xff09;、米家集成&#xff…...

spring cloud gateway 3

**Spring Cloud Gateway 3** 是 Spring Cloud 生态系统中的一个重要组件&#xff0c;用于构建 API 网关&#xff0c;提供路由、监控、安全等关键功能。以下是关于 Spring Cloud Gateway 3 的详细介绍&#xff1a; ## 1. 什么是 Spring Cloud Gateway&#xff1f; **Spring Clou…...

html + css 淘宝网实战

之前有小伙伴说&#xff0c;淘宝那么牛逼你会写代码&#xff0c;能帮我做一个一样的淘宝网站吗&#xff0c;好呀&#xff0c;看我接下来如何给你做一个淘宝首页。hahh,开个玩笑。。。学习而已。 在进行html css编写之前 先了解下网页的组成和网页元素的尺寸吧 1.网页的组成 …...

游戏引擎学习第62天

回顾 我们目前正在开发一把虚拟剑&#xff0c;目的是让角色可以用这把剑进行攻击。最初的工作中&#xff0c;我们使用了一个摇滚位图作为虚拟剑的模型&#xff0c;并且实现了一个基本的功能&#xff1a;角色可以丢下剑。但这个功能并没有达到预期的效果&#xff0c;因为我们想…...

多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度​

一、引言&#xff1a;多云环境的技术复杂性本质​​ 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时&#xff0c;​​基础设施的技术债呈现指数级积累​​。网络连接、身份认证、成本管理这三大核心挑战相互嵌套&#xff1a;跨云网络构建数据…...

rnn判断string中第一次出现a的下标

# coding:utf8 import torch import torch.nn as nn import numpy as np import random import json""" 基于pytorch的网络编写 实现一个RNN网络完成多分类任务 判断字符 a 第一次出现在字符串中的位置 """class TorchModel(nn.Module):def __in…...

Java毕业设计:WML信息查询与后端信息发布系统开发

JAVAWML信息查询与后端信息发布系统实现 一、系统概述 本系统基于Java和WML(无线标记语言)技术开发&#xff0c;实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构&#xff0c;服务器端使用Java Servlet处理请求&#xff0c;数据库采用MySQL存储信息&#xff0…...

PostgreSQL——环境搭建

一、Linux # 安装 PostgreSQL 15 仓库 sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-$(rpm -E %{rhel})-x86_64/pgdg-redhat-repo-latest.noarch.rpm# 安装之前先确认是否已经存在PostgreSQL rpm -qa | grep postgres# 如果存在&#xff0…...

提升移动端网页调试效率:WebDebugX 与常见工具组合实践

在日常移动端开发中&#xff0c;网页调试始终是一个高频但又极具挑战的环节。尤其在面对 iOS 与 Android 的混合技术栈、各种设备差异化行为时&#xff0c;开发者迫切需要一套高效、可靠且跨平台的调试方案。过去&#xff0c;我们或多或少使用过 Chrome DevTools、Remote Debug…...

多元隐函数 偏导公式

我们来推导隐函数 z z ( x , y ) z z(x, y) zz(x,y) 的偏导公式&#xff0c;给定一个隐函数关系&#xff1a; F ( x , y , z ( x , y ) ) 0 F(x, y, z(x, y)) 0 F(x,y,z(x,y))0 &#x1f9e0; 目标&#xff1a; 求 ∂ z ∂ x \frac{\partial z}{\partial x} ∂x∂z​、 …...

负载均衡器》》LVS、Nginx、HAproxy 区别

虚拟主机 先4&#xff0c;后7...

大模型——基于Docker+DeepSeek+Dify :搭建企业级本地私有化知识库超详细教程

基于Docker+DeepSeek+Dify :搭建企业级本地私有化知识库超详细教程 下载安装Docker Docker官网:https://www.docker.com/ 自定义Docker安装路径 Docker默认安装在C盘,大小大概2.9G,做这行最忌讳的就是安装软件全装C盘,所以我调整了下安装路径。 新建安装目录:E:\MyS…...

中国政务数据安全建设细化及市场需求分析

(基于新《政务数据共享条例》及相关法规) 一、引言 近年来,中国政府高度重视数字政府建设和数据要素市场化配置改革。《政务数据共享条例》(以下简称“《共享条例》”)的发布,与《中华人民共和国数据安全法》(以下简称“《数据安全法》”)、《中华人民共和国个人信息…...

【见合八方平面波导外腔激光器专题系列】用于干涉光纤传感的低噪声平面波导外腔激光器2

----翻译自Mazin Alalus等人的文章 摘要 1550 nm DWDM 平面波导外腔激光器具有低相位/频率噪声、窄线宽和低 RIN 等特点。该腔体包括一个半导体增益芯片和一个带布拉格光栅的平面光波电路波导&#xff0c;采用 14 引脚蝶形封装。这种平面波导外腔激光器设计用于在振动和恶劣的…...