C_C++数据的在内存中的分布

C/C++内存分布

在编程世界中,C和C++语言一直以其强大的性能和灵活性著称。然而,这种强大和灵活的背后,离不开对内存分布的深入理解和熟练掌握。本文将详细介绍C/C++程序中的内存分布,包括栈、堆和全局变量的存储区域。下面是c/c++中,数据存放在内存的位置示意图:
image-20240327061518354.png
【说明】

  1. 又叫堆栈–非静态局部变量/函数参数/返回值等等,栈是向下增长的。

  2. 内存映射段是高效的I/O映射方式,用于装载一个共享的动态内存库。用户可使用系统接口

创建共享共享内存,做进程间通信。(Linux课程如果没学到这块,现在只需要了解一下)

  1. 用于程序运行时动态内存分配,堆是可以上增长的。

  2. 数据段–存储全局数据和静态数据。

  3. 代码段–可执行的代码/只读常量。

看下面的一段代码和相关问题来学习和巩固相关知识

int globalVar = 1;
static int staticGlobalVar = 1;
void Test()
{static int staticVar = 1;int localVar = 1;int num1[10] = { 1, 2, 3, 4 };char char2[] = "abcd";const char* pChar3 = "abcd";int* ptr1 = (int*)malloc(sizeof(int) * 4);int* ptr2 = (int*)calloc(4, sizeof(int));int* ptr3 = (int*)realloc(ptr2, sizeof(int) * 4);free(ptr1);free(ptr3);
}
1. 选择题:选项: A.栈  B.堆  C.数据段(静态区)  D.代码段(常量区)globalVar在哪里?____   staticGlobalVar在哪里?____staticVar在哪里?____   localVar在哪里?____num1 在哪里?____char2在哪里?____   *char2在哪里?___pChar3在哪里?____      *pChar3在哪里?____ptr1在哪里?____        *ptr1在哪里?____
2. 填空题:sizeof(num1) = ____;  sizeof(char2) = ____;      strlen(char2) = ____;sizeof(pChar3) = ____;     strlen(pChar3) = ____;sizeof(ptr1) = ____;
3. sizeof 和 strlen 区别?//答案:  
1. 选择题:选项: A.栈  B.堆  C.数据段(静态区)  D.代码段(常量区)globalVar在哪里?__C__   staticGlobalVar在哪里?_C___staticVar在哪里?__C__   localVar在哪里?_A___num1 在哪里?__A__char2在哪里?__A__   *char2在哪里?_A_//如果是字符指针就是常量区(无法修改),如果是数组就在栈区(字符确实存在常量区,但是它会拷贝到栈区数组处pChar3在哪里?__A__      *pChar3在哪里?__D__ptr1在哪里?__A__        *ptr1在哪里?__B__
2. 填空题:sizeof(num1) = __40__;  sizeof(char2) = __5__;      strlen(char2) = _4___;sizeof(pChar3) = _4/8___;     strlen(pChar3) = _4___;sizeof(ptr1) = _4/8___;3. sizeof 和 strlen 区别?
//一个是计算大小,一个是计算字符数量,sizeof把'/0'的大小也算,strlen不算

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

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

相关文章

hyperf 多数据库(要分库的来看)实时连接第二方案(无需预先定义config连接池,无需重启项目)

第一方案连接: https://blog.csdn.net/mark885/article/details/137040284思路:通过 Hyperf\Contract\ConfigInterface 配置接口类修改内存中的配置信息,在框架启动完成后的事件中定义监听(效果是框架启动后自动设置一次数据库连…

基于OrangePi Zero2的智能家居项目(开发阶段)

智能家居项目的软件实现 紧接上文 基于OrangePi Zero2的智能家居项目(准备阶段)-CSDN博客 目录 一、项目整体设计 1.1项目整体设计 1.2具体划分 二、开发工作的前期准备 1、进行分类,并用Makefile文件进行管理 参考:自己创…

基于单片机的智能报站系统仿真设计

**单片机设计介绍,基于单片机的智能报站系统仿真设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机的智能报站系统仿真设计概要是关于采用单片机技术实现公交车报站功能的系统设计概述。以下是对该设计的…

Unity 学习日记 13.地形系统

下载源码 UnityPackage 1.地形对象Terrain 目录 1.地形对象Terrain 2.设置地形纹理 3.拔高地形地貌 4. 绘制树和草 5.为地形加入水 6.加入角色并跑步 7.加入水声 右键创建3D地形: 依次对应下面的按钮 || 2.设置地形纹理 下载资源包 下载资源包后&#x…

Linux setenv命令教程:如何在Linux中设置环境变量(附实例详解和注意事项)

Linux setenv命令介绍 setenv是C shell(csh)的内置函数,用于定义环境变量的值。如果setenv没有给出任何参数,它会显示所有环境变量及其值。如果只指定了VAR,它将设置一个名为VAR的环境变量,值为空&#xf…

vue2+element-ui 实现OSS分片上传+取消上传

遇到问题:项目中需要上传500MB以上的视频。一开始使用上传组件el-upload,调用后台接口,但是出现了onprogress显示百分百后接口一直pending,过了很多秒后接口才通,如果遇到大文件的话,接口就会报超时。 解决…

基于卷积神经网络的苹果等级分类系统(pytorch框架)【python源码+UI界面+前端界面+功能源码详解】

功能演示: 苹果等级分类系统,基于vgg16,resnet50卷积神经网络(pytorch框架)_哔哩哔哩_bilibili (一)简介 基于卷积神经网络的苹果等级分类系统是在pytorch框架下实现的,系统中有两…

redis 集群 (主从复制 哨兵模式 cluster)

目录 一 主从复制 (一)相关理论 1,主从复制定义 2,主从复制的作用 3,主从复制架构图 4 sync 同步过程 5,主从复制流程 (二) 实验模拟 1, 实验环境 2, 修…

手机如何访问vue项目localhost

手机访问vue项目本地localhost: 打开终端,运行ipconfig(对于Windows)或ifconfig(对于Mac/Linux)来查看计算机的IP地址。找到类似IPv4 Address的条目,这是计算机的本地IP地址。 在终端中&#x…

机械制造学习笔记

一、切削加工、切削运动的基本概念及刀具切削过程 切削加工: 定义:切削加工是利用切削刀具对工件进行切削,以去除多余材料并得到所需形状和尺寸的加工方法之一。应用:广泛应用于金属加工、木材加工、塑料加工等领域,是…

axios请求封装,适用于RN,React,Vue,Uniapp(相对于前面几个新增个自定义header头)

axios.js import axios from axios; const instace axios.create({baseURL: https://internal.takehr.cn, //接口地址timeout: 5000, //超时时间 });//配置请求拦截器,在请求之前的数据处理,比如在请求头添加token,所有的请求都会经过拦截器 instace.interceptors.request.us…

IDEA连接SqlServer数据库

目录 下载jar包 下载sqljdbc_12.6压缩包 解压 导入IDEA 新建文件夹 复制粘贴进JDBC文件夹并设为library 编写类及方法 代码 下载jar包 以sqljdbc_12.6为例 下载sqljdbc_12.6压缩包 最新地址:sqljdbc 官方最新地址 解压 解压即用 导入IDEA 新建文件夹 复制…

JS实现双向数据绑定的三种方式

1、第一种是通过Proxy数据代理来达到双向绑定的,这是Vue3更新的双向绑定方式。 <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>Proxy双向绑定</title> <<

(delphi11最新学习资料) Object Pascal 学习笔记---第8章第5节(抽象方法)

8.5 抽象方法与类&#xff1a; ​ 在创建类的层次结构时&#xff0c;有时很难确定哪个是基类&#xff0c;因为基类可能并不代表实际的实体&#xff0c;而只是用来保存某些共享行为。例如&#xff0c;猫或狗类的动物基类。这种不需要创建任何对象的类通常被称为抽象类&#xff…

C++的并发世界(六)——互斥解决数据共享冲突

0.数据共享的问题 在多个线程中共享数据时。需要注意线程安全问题。如果多个线程同时访问同一个变量。并且其中至少有一个线程对该变量进行了写操作。那么就会出现数据竞争问题。数据竞争可能会导致程序崩溃,产生来定义的结果,或者得到错误的热果。为了避免数据竞争问题。需要…

docker部署nacos,单例模式(standalone),使用mysql数据库

文章目录 前言安装创建文件夹"假装"安装一下nacos拷贝文件夹删除“假装”安装的nacos容器生成nacos所需的mysql表获取mysql-schema.sql文件创建一个mysql的schema 重新生成新的nacos容器 制作docker-compose.yaml文件查看网站 前言 此处有本人写得简易版本安装&…

【开发、测试】接口规范与测试

接口测试基础 url 是互联网标准资源地址&#xff0c;称为统一资源定位符 组成&#xff1a;协议&#xff0c;服务器地址&#xff0c;端口号 HTTP协议 HTTP&#xff1a;超文本传输协议&#xff0c;基于请求与响应的应用层协议 作用&#xff1a;规定了客户端和服务器之间的信…

可视化大屏的应用(18):网络安全和信息安全领域

可视化大屏在物联网领域具有以下价值&#xff1a; 实时监控和可视化&#xff1a; 可视化大屏可以将物联网设备和传感器的数据以图表、图形和动画等形式实时展示&#xff0c;帮助用户直观地了解物联网系统的运行状态和数据趋势。通过可视化大屏&#xff0c;用户可以快速发现异…

海外版 双语言爆点游戏 双语音指挥游戏 去中心化投注游戏 双声道音效游戏 附带安装教程

海外版双语言爆点游戏/纯vue源码版/去中心化投注游戏 系统为纯VUE源码&#xff0c;附带安装教程 前端只有一个爆点游戏能玩&#xff0c;去中心化无后台 源码下载&#xff1a;https://download.csdn.net/download/m0_66047725/88991298 更多资源下载&#xff1a;关注我。

为 AI 而生的编程语言「GitHub 热点速览」

Mojo 是一种面向 AI 开发者的新型编程语言。它致力于将 Python 的简洁语法和 C 语言的高性能相结合&#xff0c;以填补研究和生产应用之间的差距。Mojo 自去年 5 月发布后&#xff0c;终于又有动作了。最近&#xff0c;Mojo 的标准库核心模块已在 GitHub 上开源&#xff0c;采用…