zoukankan      html  css  js  c++  java
  • 写的不错 不能回避的话题: 内存分配 (转)

    在 Delphi 中, 几乎所有的类型都有对应的指针类型, 譬如: Char PChar Word PWORD Double PDouble TPoint PPoint 甚至一种类型对应这着几种指针类型, 譬如: Integer PInteger PINT WideChar PWideChar PWChar 即使它没有定义, 我也可以直接使用一个类型的指针, 譬如声明一个整数的指针变量: var px: ^Integer; 也可以先自定义指针类型, 再使用, 譬如: type MyIntPointer = ^Integer; var px: MyIntPointer; 看来声明指针类型还是挺方便, 但使用有点麻烦, 需要先申请内存! 我们可以用以下三种方法, 为指针(譬如是一个 Double 类型的指针)去申请需要的内存:
    var
    pd: PDouble;
    begin
    New(pd);
    pd^ := 99.9;
    ShowMessage(FloatToStr(pd^)); {99.9}
    Dispose(pd);
    end;
    
    var pd: PDouble; begin GetMem(pd, SizeOf(Double)); pd^ := 99.9; ShowMessage(FloatToStr(pd^)); {99.9} FreeMem(pd); end;
    var pd: PDouble; begin ReallocMem(pd, SizeOf(Double)); pd^ := 99.9; ShowMessage(FloatToStr(pd^)); {99.9} FreeMem(pd); end;
    分析这三种方法:

    New 方法申请的地址是独立的. 参见:
    http://www.cnblogs.com/del/archive/2008/03/27/1125718.html

    GetMem 方法只有每次申请的地址才是连续的. 参见:
    http://www.cnblogs.com/del/archive/2008/03/27/1125778.html

    如果需要多次申请并保证地址的连续性(地址连续了会方便管理, 从而提高速度), 应该使用 ReallocMem. 参见:
    http://www.cnblogs.com/del/archive/2008/03/27/1126180.html

    TList 类在给它的数组添加元素时就是使用 ReallocMem 来申请或分配内存的.
  • 相关阅读:
    JS深度判断两个数组对象字段相同
    box-shadow inset
    swiper实现滑动到某页锁住不让滑动
    vuex上手文章参考
    js基础补漏
    react学习文章
    C# .Net String字符串效率提高-字符串拼接
    JS,Jquery获取各种屏幕的宽度和高度
    highcharts的dataLabels如何去处阴影
    .net C# 抽奖,中奖
  • 原文地址:https://www.cnblogs.com/feng801/p/1286773.html
Copyright © 2011-2022 走看看