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

new 为数组开辟内容空间的时候,数组大小这个额外的信息是如何存储的? int * p = new int[5]; 指针p 指向的的int 数据地址还是数组大小的地址?

new 为数组开辟内容空间的时候,数组大小这个额外的信息是如何存储的? int * p = new int[5]; 指针p 指向的的int 数据地址还是数组大小的地址?

在C++中,使用new int[5]动态分配数组时,数组大小的存储方式和指针指向的地址如下:

1. ‌数组大小的存储机制‌

编译器会在分配的内存块头部额外存储数组长度等元信息(通常位于实际数组元素内存之前),这部分对程序员透明。具体实现方式由编译器决定,可能通过隐藏的头部字段记录分配大小,但标准未明确规定存储格式。

2. ‌指针p的指向‌

int p = new int[5]中,指针p直接指向数组第一个元素的地址(即&p[0]),而非存储数组大小的元数据地址。数组访问通过指针算术运算实现,如p[i]等价于(p + i)。

3. ‌关键区别‌

数组名是常量指针(如int arr[5]),其类型包含数组长度信息(int[5]),而p仅是int*类型指针。 sizeof(数组名)返回整个数组字节数,而sizeof(p)返回指针本身大小(4或8字节)。 动态分配的数组需手动释放(delete[] p),编译器依赖隐藏的元信息确定释放范围。
4. ‌内存布局示例‌

[元数据][p[0]][p[1]]...[p[4]]
↑         ↑
隐藏区域  p实际指向这里

此布局中,程序员仅能访问p指向的元素区域,元数据由内存管理器内部处理。

问题思考:
1. 数组中元数据应该是什么数据类型 ? 目前我们可以通过指针p[] 来访问数据元素,有办法访问到元数据吗?
2. 数组和动态数组释放的时候,是如何获取到元数据的内容的?

http://www.zskr.cn/news/11542.html

相关文章:

  • Java适配器模式介绍与实现示例 - 指南
  • 欧拉函数学习笔记
  • 系统调用brk 和 mmap 有什么不同?
  • 高性能PCIe 3.0软核,x1~x16,支持EP/RC,AXI4接口,内置DMA控制器,适用ASIC和FPGA
  • 使用git clone 批量下载huggingface模型文件
  • 日记4
  • 你看到的和你想要的
  • LAMP 架构说明及部署实践 - 教程
  • 【Linux】优秀的系统部分——线程池的基本设计思路
  • 实用指南:Pycharm中切换虚拟环境
  • MyEMS 深度解析:核心功能模块、数据流转逻辑与工业能源优化落地路径
  • 如何选择合适的服务器租用商? - 实践
  • ios26版本回退到ios18 - 指南
  • 详细介绍:SMTPman,smtp服务器的使用全解析与指南!
  • WPF ListBox VirtualizingPanel.CacheLengthUnit=Item VirtualizingPanel.CacheLength=5,5
  • 深入解析:Adobe Fresco下载教程Adobe Fresco 2025保姆级安装步骤(附安装包)
  • 深入解析:贪心算法之船舶装载问题
  • 抗体药物偶联物(ADCs)生物分析:拆解 “靶向导弹” 体内轨迹的核心技术
  • 使用IOT-Tree整合复杂计算模型(含AI模型),并对接现场设备优化控制(节能提效)技能方案
  • 经典三层架构项目(3-tier architecture)中应用依赖倒置原则(DIP)的理性权衡
  • Jupyter NoteBook / Jupyter Lab的安装与使用
  • 易基因:Nat Rev Drug Discov/IF101.8:何川团队顶刊综述RNA修饰系统作为疾病治疗靶点的研究进展
  • Mini L-CTF 2025 WP
  • 【ACM出版、连续三届EI检索】第四届人工智能与智能信息处理国际学术会议(AIIIP 2025)
  • 08_多线程编程
  • 【组合数学基础9】Catalan数(卡特兰数)笔记
  • 【IEEE出版】第二届数据挖掘与智能计算国际学术会议(ICDM 2025)
  • 深入解析:贪心算法应用:顶点覆盖问题详解
  • c++编程经典资料
  • PS字体处理