zoukankan      html  css  js  c++  java
  • 学习 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 的核心就是这个数组的指针!

  • 相关阅读:
    配置log4j不同方法打印到不同的日志中
    Logging日志信息(转)
    Mybatis 动态sql
    mysql字段截取(转)
    tomcat多个端口配置
    Map,list,set,集合转化
    简单测试java
    java中有关自增的问题
    DMA复习
    笔试题
  • 原文地址:https://www.cnblogs.com/del/p/1124919.html
Copyright © 2011-2022 走看看