• 写的不错 不能回避的话题: 内存分配 (转)


    在 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 来申请或分配内存的.
  • 相关阅读:
    redis发布订阅
    redis学习笔记(面试题)
    redis安全 (error) NOAUTH Authentication required
    HDU3001 Travelling —— 状压DP(三进制)
    POJ3616 Milking Time —— DP
    POJ3186 Treats for the Cows —— DP
    HDU1074 Doing Homework —— 状压DP
    POJ1661 Help Jimmy —— DP
    HDU1260 Tickets —— DP
    HDU1176 免费馅饼 —— DP
  • 原文地址:https://www.cnblogs.com/feng801/p/1286773.html
Copyright © 2020-2023  润新知