Windows 上,但使用C++语言new一块内存,用指针P指向这块内存,但我们调用delete的时候如何知道我们需要释放的空间大小,毕竟我们只给了一个P指针,并没有给出内存大小。

在Windows系统上,每当使用new/new[]申请到内存时,回调用系统的API在堆上开出一块我们需要大小的内存。例如:

int* p = new int[100];

此时申请成功时,P指向了这块内存的一个元素地址。同时,会在P的前面,记录我们申请的内存大小,这样当我们调用delete []p时,系统才知道我们具体申请的内存大小。

以下就是P指针地址前面存储我们申请内存信息的结构体:

//typedef struct _RTL_HEAP_ENTRY {//      SIZE_T Size;
//      USHORT Flags;
//      USHORT AllocatorBackTraceIndex;
//      union {//              struct {//                      SIZE_T Settable;
//                      ULONG Tag;
//              } s1;
//              struct {//                      SIZE_T CommittedSize;
//                      PVOID FirstBlock;
//              } s2;
//      } u;
//} RTL_HEAP_ENTRY, *PRTL_HEAP_ENTRY;
用下面代码查看具体的存储信息
//   int *p = new int[100];
//   PRTL_HEAP_ENTRY pHeapEntry=(PRTL_HEAP_ENTRY(p)-1);
//   printf("i: %d, size: %d\n", i, pHeapEntry->Size);以上代码就是通过指针获取内存大小,具体多少字节。
我们可以做个小实验:
1 我们把P向后移动一个位置或者向前,只要不是这块内存的第一个位置,然后我们delete[] p,会有什么后果?后果不可预测!!自己实验下,系统卡死,死循环

Windows 上C++ new/detele如何知道内存大小相关推荐

  1. 4款Windows上鲜为人知的黑马软件,内存不足也舍不得删除

    咱们话不多说,直入主题. CCleaner CCleaner,是一款由外国人发明的,优秀隐私保护和系统优化工具. CCleaner 熟悉它的人都知道,CCleaner的主要用途是清除Windows系统 ...

  2. Android保存的图像在Windows照片查看器打开提示“可能内存不足”

    一个天朗气清的早晨,我开开心心的上班,突然收到一条售后问题,pad中经过我们APP保存的图片在windows上无法打开,提示"可能内存不足",效果如下: 项目经理吓懵了,我突然觉得 ...

  3. WINDOWS平台上扩展SGA,把你的内存用起来吧

    WINDOWS平台上扩展SGA ------------------------------------------------------------------------------------ ...

  4. python32位 最大内存_64位windows上的Python 32位内存限制

    我不知道你为什么认为你的进程应该能够访问4GB.根据MSDN的Memory Limits for Windows Releases,在64位Windows 7上,一个默认的32位进程得到2GB.*这正 ...

  5. 32位程序在Windows上的内存问题

    问题描述: 32位的程序运行在Win2016上,内存增加到1.4G左右就崩溃了. 原因分析: 默认情况下,32位程序虚拟地址空间是4G,其中2G为内核空间,系统使用:2G为用户虚拟地址空间,是用户可申 ...

  6. 内存检测工具Dr.Memory在Windows上的使用

    之前在https://blog.csdn.net/fengbingchun/article/details/51626705 中介绍过Dr.Memory,那时在Windows上还不支持x64,最新的版 ...

  7. mrtg监控linux主机的甚至,windows上mrtg监控linuxcpu 内存

    *网上95%都是linux安装mrtg来做监控,windows来做监控机的很少,即使用也是轻轻点水很肤浅,下面是我亲自在windows上安装mrtg来做监控机的实验,并且也已经开始运行在企业当中.mr ...

  8. 时间就是金钱!Windows 上必装的 10 款高效软件

    点击上方"视学算法",选择"星标"公众号 重磅干货,第一时间送达 来源 | 资源搜罗精选 不管你是上班族还是学生党,是电脑迷还是技术派,都会常跟电脑打交道.今天 ...

  9. linux运行容器,容器与云|如何在 Windows 上运行 Linux 容器

    1.概述 现在能够在 Windows 10 和 Windows 服务器上运行 Docker 容器了,它是以 Ubuntu 作为宿主基础的. 想象一下,使用你喜欢的 Linux 发行版--比如 Ubun ...

  10. Windows上的原生Linux容器(盆盆的Kubecon课程分享)

    您测试过Windows上的Linux容器吗? 这是本周末刚闭幕的Kubecon大会,笔者在课堂上提出的问题. 关于这个问题,大家常有的困惑就是,我们为什么要在Windows上运行Linux容器?您可以 ...

最新文章

  1. python的分支语句中if和else必须同时出现_Python条件控制分支语句if…else…
  2. linux ie8找不到,ie浏览器不见了怎么办 三种方法搞定【图文教程】
  3. literature review and methodology
  4. 老师吴恩达,身家又增20亿!
  5. Windows 2000缓冲区溢出技术原理
  6. webpack4.0各个击破(7)—— plugin篇
  7. [Ext JS 4] 实战之 ComboBox 和 DateField (消失之解决办法)
  8. 哈工大讯飞联合实验室发布少数民族多语言预训练模型CINO
  9. Python3入门机器学习经典算法与应用 第3章 numpy.array 中的运算
  10. 删除数据清理oracle表空间,oracle删除(释放)数据文件/表空间流程
  11. 材料模拟python_关于材料计算,模拟,仿真什么区别?
  12. DBSCAN聚类算法原理和伪代码
  13. 深度解密Go语言之map
  14. [GIS原理] 8 GIS基本空间分析-叠置分析|缓冲区分析|窗口分析
  15. Ubuntu环境下安装QT5
  16. C++ boost库中的sp_counted_base实现解析
  17. 如何访问同一局域网内的其他电脑文件
  18. PS图片无法保存ICO格式解决方法
  19. 深入了解计算机系统——实验二(Data Lab)(详解)
  20. 数据大屏领导驾驶舱大数据分析UI1-4(PSD-持续更新)

热门文章

  1. 详解光纤光缆、网线、电缆的区别
  2. win10+Python3.7.3+OpenCV3.4.1入门学习(十一 图像金字塔)————11.1 图像金字塔理论基础
  3. aso优化师是什么_做ASO优化师这么多年,没想到被它打败了!
  4. 静态代理和动态代理的区别和联系
  5. [离散数学]集合论基础P_4:运算定律及其证明
  6. 《SEM长尾搜索营销策略解密》一一2.12 宝洁里的长尾与创新
  7. NOI-C语言编程基础之循环控制——药房管理
  8. 前后端分离的好处有哪些?
  9. (pre-receive hook declined) git push error
  10. Linux查看目录大小——du命令