zoukankan      html  css  js  c++  java
  • 内存管理[4]一个使用私有堆的例子

    一个使用私有堆的例子:


    unit Unit1;
    
    interface
    
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;
    
    type
      TForm1 = class(TForm)
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      end;
    
    var
      Form1: TForm1;
    
    implementation
    
    {$R *.dfm}
    
    var
      MyHeap: THandle; {堆句柄}
      p: Pointer;
    
    procedure TForm1.Button1Click(Sender: TObject);
    var
      i,num: Integer;
      p2: Pointer;
      str: string;
    begin
      {建立堆}
      MyHeap := HeapCreate(HEAP_ZERO_MEMORY, 1024*1024*2, 0); {建立个 2M 的堆}
      if Myheap = 0 then Exit; {如果创建失败则退出}
    
      {从堆中分配内存}
      p := HeapAlloc(MyHeap, 0, 7);
      if p = nil then Exit; {出错退出}
    
      {获取内存块大小}
      num := HeapSize(MyHeap, 0, p);
    
      {给内存块的每个字节赋值}
      p2 := p;
      for i := 0 to num - 1 do
      begin
        Byte(p2^) := i + 65;
        p2 := Ptr(Integer(p2) + 1);
      end;
    
      {取值}
      p2 := p;
      str := '';
      for i := 0 to num - 1 do
      begin
        str := str + Chr(Byte(p2^));
        p2 := Ptr(Integer(p2) + 1);
      end;
    
      {显示内存块的内容与大小}
      ShowMessageFmt('%s,%d',[str,num]); {ABCDEFG,7}
    
      /////////////////////////////////////////////////////
    
      {扩充内存, 只此一句不同, 下面都是重复上面的代码}
      p := HeapReAlloc(MyHeap, 0, p, 26);
      if p = nil then Exit; {出错退出}
    
      {获取内存块大小}
      num := HeapSize(MyHeap, 0, p);
    
      {给内存块的每个字节赋值}
      p2 := p;
      for i := 0 to num - 1 do
      begin
        Byte(p2^) := i + 65;
        p2 := Ptr(Integer(p2) + 1);
      end;
    
      {取值}
      p2 := p;
      str := '';
      for i := 0 to num - 1 do
      begin
        str := str + Chr(Byte(p2^));
        p2 := Ptr(Integer(p2) + 1);
      end;
    
      {显示内存块的内容与大小}
      ShowMessageFmt('%s,%d',[str,num]); {ABCDEFGHIJKLMNOPQRSTUVWXYZ,26}
    
      /////////////////////////////////////////////////////
    
      {释放内存}
      HeapFree(MyHeap, 0, p);
    
      {销毁堆}
      HeapDestroy(MyHeap);
    end;
    
    end.
  • 相关阅读:
    【 DCOS 】织云 CMDB 管理引擎技术详解
    腾讯云无服务器云函数架构精解
    深度学习在 CTR 中应用
    一文教你迅速解决分布式事务 XA 一致性问题
    小程序开发工具全新上线
    秦俊:开放 DevOps 敏捷开发套件,助力开发者驰骋云端
    张兴华:云端架构助力企业快速成长
    王磊:AI 时代物流行业的 OCR 应用
    陈杰:无服务器架构,让云端开发更纯粹
    腾讯织云:DevOps 流水线应用平台践行之路
  • 原文地址:https://www.cnblogs.com/h2zZhou/p/6649783.html
Copyright © 2011-2022 走看看