内存管理[5]通过 GetProcessHeaps 函数获取了当前进程的堆句柄列表
本例在建立一个新的堆前后分别通过 GetProcessHeaps 函数获取了当前进程的堆句柄列表, 没想到一个最简单的程序也有 5 个堆.
效果图:

unit Unit1; interface uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls; type
TForm1 = class(TForm)
Memo1: TMemo;
Memo2: TMemo;
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
end; var
Form1: TForm1; implementation {$R *.dfm} {把下面两个过程公用的部分提取为一个独立的过程}
procedure GetHeaps(List: TStrings);
var
HeapArr: array[..] of THandle; {对列表数组, 先假定有 10 堆}
n: Integer;
i: Integer;
begin
{获取进程中的堆列表; 函数的参数1是数组大小, 参数2是数组的第一个元素, 返回堆的实际数量}
n := GetProcessHeaps(Length(HeapArr), HeapArr[]);
List.Add(Format('当前进程共有 %d 个堆', [n])); List.Add('它们的句柄分别是:'); for i := to n - do
List.Add(IntToStr(HeapArr[i]));
end; procedure TForm1.FormCreate(Sender: TObject);
begin
Memo1.Clear; {调用公用过程, 在 Memo1 中显示堆句柄列表}
GetHeaps(Memo1.Lines); {再次添加默认堆的句柄}
Memo1.Lines.Add('');
Memo1.Lines.Add('默认堆的句柄是:');
Memo1.Lines.Add(IntToStr(GetProcessHeap));
end; procedure TForm1.Button1Click(Sender: TObject);
var
MyHeap: THandle;
begin
{创建新堆}
MyHeap := HeapCreate(, **, ); {建立个 2M 的堆} Memo2.Clear; {调用公用过程, 在 Memo2 中显示堆句柄列表}
GetHeaps(Memo2.Lines); {再次添加新建堆的句柄}
Memo2.Lines.Add('');
Memo2.Lines.Add('新建堆的句柄是:');
Memo2.Lines.Add(IntToStr(MyHeap)); {销毁新建堆}
HeapDestroy(MyHeap);
end; end.
内存管理[5]通过 GetProcessHeaps 函数获取了当前进程的堆句柄列表的更多相关文章
- C/C++(C++内存管理,内联函数,类型转换,命名空间,string类)
---恢复内容开始--- 内存管理 new/delete C语言中提供了 malloc 和 free 两个系统函数,#include "stdlib.h"库函数,完成对堆内存的申请 ...
- Redis内存管理(一)
Redis数据库的内存管理函数有关的文件为:zmalloc.h和zmalloc.c. Redis作者在编写内存管理模块时考虑到了查看系统内是否安装了TCMalloc或者Jemalloc模块,这两个是已 ...
- php内存管理
1.为什么需要内存管理 由于计算机的内存由操作系统进行管理,所以普通应用程序是无法直接对内存进行访问的, 应用程序只能向操作系统申请内存,通常的应用也是这么做的,在需要的时候通过类似malloc之类的 ...
- php 内存管理
内存是计算机⾮常关键的部件之⼀,是暂时存储程序以及数据的空间,CPU只有有限的寄存器可以⽤于存储计算数据,⽽⼤部分的数据都是存储在内存中的,程序运⾏都是在内存中进⾏的.和CPU计算能⼒⼀样, 内存也是 ...
- 内存管理相关函数 -- Linux【转】
转自:http://blog.csdn.net/cy_cai/article/details/47001245 1.kmalloc()/kfree() static __always_inline v ...
- Spark内核| 调度策略| SparkShuffle| 内存管理| 内存空间分配| 核心组件
1. 调度策略 TaskScheduler会先把DAGScheduler给过来的TaskSet封装成TaskSetManager扔到任务队列里,然后再从任务队列里按照一定的规则把它们取出来在Sched ...
- Spark内存管理机制
Spark内存管理机制 Spark 作为一个基于内存的分布式计算引擎,其内存管理模块在整个系统中扮演着非常重要的角色.理解 Spark 内存管理的基本原理,有助于更好地开发 Spark 应用程序和进行 ...
- Apache Spark 内存管理详解(转载)
Spark 作为一个基于内存的分布式计算引擎,其内存管理模块在整个系统中扮演着非常重要的角色.理解 Spark 内存管理的基本原理,有助于更好地开发 Spark 应用程序和进行性能调优.本文旨在梳理出 ...
- C内存管理相关内容--取自高质量C++&C编程指南
1.内存分配方式 内存分配方式有三种: (1)从静态存储区域分配.内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在.例如全局变量,static变量. (2) 在栈上创建.在执行函数 ...
随机推荐
- 记服务器 httpd 服务无法启动
httpd 服务无法重启 ,网上查到的资料都是端口号冲突 ,记录一下自己的解决办法 !!! 首先查看 服务状态 : service status httpd / systemctl status h ...
- touch: cannot touch ‘/var/jenkins_home/copy_reference_file.log’: Permission denied
docker 运行后, 执行docker logs -f myjenkins时报错: touch: cannot touch ‘/var/jenkins_home/copy_reference_fil ...
- perl学习之子例程
1.system function && user function system fucntion:chomp reverse print... user function: & ...
- 第一章 pyhton基础
一 .pyhton2与python3的区别 在pyhton2中,其中编码默认使用的是ascii编码,输出格式为print"xxx",输入为raw_input(“请输入”),在整型中 ...
- 阀值化 threshold
OpenCV中的阈值(threshold)函数: threshold 的运用. C++: double threshold(InputArray src, OutputArray dst, doubl ...
- 牛客网暑期ACM多校训练营(第一场)J Different Integers(树状数组, 离线)
题意: 给定n个数字, 然后给出m个区间, 求区间外其他数字的种类有多少. 分析: 将区间以r为基准升序排序, 每次处理pre~r的数字第一次出现的位置. #include<bits/stdc+ ...
- SpringMVC之HandlerMapping源码分析
01.doDispatch方法中代码如下:HandlerExecutionChain mappedHandler=this.getHandler(processedRequest) 02.Dispat ...
- Android开发工具——Gradle知识汇总
1.什么是构建工具 Eclipse大家都知道是一种IDE(集成开发环境),最初是用来做Java开发的,而Android是基于Java语言的,所以最初Google还是希望Android能在Eclipse ...
- 解决img标签上下出现间隙的方法
图片与父元素下边缘有 2px 的间隙,并不是因为空格.多个 inline-block 元素之间的间隙才是因为空格. 任何不是块级元素的可见元素都是内联元素,其表现的特性是“行布局”形式.----< ...
- How To Configure VMware fencing using fence
本文主要简单介绍一下如何在RHEL 7 Pacemaker中配置一个fence_vmware_soap类型的STONITH设备(仅供测试学习). STONITH是Shoot-The-Other-Nod ...