• 学习 TList 类的实现[2]


    我原来以为 TList 可能是一个链表, 其实只是一个数组而已.

    你知道它包含着多大一个数组吗? MaxListSize 个!
    MaxListSize 是 Delphi 在 Classes 单元定义的一个常量:
    MaxListSize = Maxint div 16; 也就是 134217727; 这也是 TList 的最大容量.
    其中的 Maxint(2147483647) 也就是 2个G, 这是 Win32 系统许可一个应用程序对空间的最大操控权; 16 是一个 TList 的大小. 可以测试一下:
    var
      List: TList;
    begin
      List := TList.Create;
      ShowMessage(IntToStr(List.InstanceSize)); {16}
      List.Free;
    end;

    如果一个类真的包含一个 2个G 大小的数组, 这是不可想想的, 类一建立程序就死定了; 巧妙的是 TList 只是使用了这个数组的指针!
    Delphi 已经为这个数组和数组指针都做了定义:
    PPointerList = ^TPointerList;
    TPointerList = array[0..MaxListSize - 1] of Pointer;

    这样以来, 我们使用多少就去申请多少内存空间就是了.
    关于指针和申请内存空间还是应该多了解一点; 因为 TList 的核心就是这个数组的指针!
  • 相关阅读:
    CODEFORCES 429B 动态规划
    HDU 2084(DP)
    最大公约数算法(待续)
    spring---aop 配置
    代理模式
    spring--学习之IOC DI
    spring--基本介绍
    JAVASE 面试总结(1)
    工厂模式
    建造者模式
  • 原文地址:https://www.cnblogs.com/shijiaoyun/p/3844493.html
Copyright © 2020-2023  润新知