Windows 上C++ new/detele如何知道内存大小
来源:互联网 发布:淘宝开放平台有什么用 编辑:程序博客网 时间:2024/04/29 17:33
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,会有什么后果?后果不可预测!!自己实验下,系统卡死,死循环
0 0
- Windows 上C++ new/detele如何知道内存大小
- windows如何知道已经连接上Internet
- 如何在 Windows上编译Objective-C
- 如何在 Windows上编译Objective-C
- 如何在 Windows上编译Objective-C
- 如何在Windows上编译Objective-C
- C动态内存分配:(四)malloc与new分配内存大小查看函数:_msize()/malloc_usable_size
- tomcat内存大小设置(windows)
- 如何修改tomcat内存大小
- 如何调整weblogic内存大小
- 如何修改tomcat内存大小
- 如何修改tomcat内存大小
- 如何调整weblogic内存大小
- Eclipse如何设置内存大小
- 你不知道的C++(1)-- operator NEW
- C++new的所不知道的用法
- C++primer 5.8sizeof 操作符--上(不同类型所占用的内存大小字节)
- WINDOWS中tomcat改变内存大小
- cocos2dx 拖动精灵
- lesson1作业
- 窗口、视口、屏幕显示详解--计算机绘图基本功
- jQuery-UI学习dialog_form
- 在Ubuntu下使用vsftpd搭建FTP服务器
- Windows 上C++ new/detele如何知道内存大小
- PAT 1056. Mice and Rice
- C++内存处理的问题小结
- CFS 调度器
- 第一道 状态压缩dp
- 1.1 Spring事务管理及方式
- python python-mysql Reason:image not found
- ["扫地"杯III day2]旅游景点 想想就有了
- hadoop 解除"Name node is in safe mode"