如果我有同一个类的若干个对象,用数组来存储好呢还是链表存储好?它们对于内存消耗有何不同?问题源于我的程序启动和运行时有时候比较慢(机器重启以后除外),程序运行时create了十几个对象,用数组来存储,我怀疑是不是这样内存消耗太大,用TList来存储时不是要好一点?我的机器是WinXP,192M RAM
不知道各位的程序有没有出现启动时慢,窗口拖动时出现粘滞现象?

解决方案 »

  1.   

    十几个对象不算大吧。小case了。几万个对象才算大了。
      

  2.   

    只要你创建了对象,那就已经消耗内存了,而跟用什么存储无关,因为对象的存储只是一个指针罢了,你用数组是存指针,是链表也是存指针,同样是占据了4个字节的空间(32位机器)!
    一般来说用TList来存储对象的话操作起来会方便一些,而用自定义的数组的话灵活性就没有TList的好了!
      

  3.   

    对,不知道你创建的是什么对象,是不是FORM,消耗内存正如楼上说的,只要CREATE了就消耗内存了,消耗多少取决于你所创建的对象本身,与你采用什么来保存没关系,采用什么来保存只是看使用方便,用TLIST和ARRAY基本是一样的,用链表的话如果你对指针不太熟的话就不用了
      

  4.   

    还有,你CREATE后,运行一段时间机器速度变慢,首先你能不能确定是由于你的程序引起的,如果是,看看是不是有大量的需要FREE的对象没有FREE
      

  5.   

    呵呵,linzhengqun(linzhengqun)兄台蛮会抠字眼的,您说的完全正确。
    楼主自己权衡吧!
      

  6.   

    可以肯定是这个程序引起的机器变慢,因为我关掉它的时候机器速度就恢复正常。我在启动程序的时候就开始慢,此时还不到free的时候吧,所以应该不是大量对象没有free的问题。对了,我把这个程序的窗口最小化以后,机器速度也恢复正常,拖动其他窗口没有粘滞现象。这是怎么回事?这个问题困扰了我几个星期了,请大家教我!
      

  7.   

    juliens(星星球):
    对,程序启动的时候要进行某些操作,这个慢一点可以理解。但是启动完成以后,程序进入等待状态,这时仍然慢,拖动时有粘滞,无法弄通的就是这个。
      

  8.   

    大概 说一下:
    数组 和 链表的主要区别就是速度不一样 TLIST一般情况下 不要用,我测试过自建双向链表
    速度要别tlist快的多,如果的你的程序内存存储部分要经常更换大小可以考虑链表 如果大小
    不需要变换 可以考虑数组(毕竟速度快多了(直接定位))
      

  9.   

    数组是 O(1) 操作。
    链表是 O(n) 操作。
    使用数组来编写栈和队列可能效果要比链表更好一些。
    这是我从delphi算法与数据结构上看到的。
      

  10.   

    TLIST和ARRAY怎么会是一样。TList是个对象,而动态数组是编译器内置的命令。无论从大小还是速度TLIST都比不过动态数组。TLIst只是使用方便而已。但动态数组更为灵活。动态数组也不是死的,你可以更改大小。
      

  11.   

    to linzhengqun(linzhengqun) ( ) 信誉:100  上面说得不对,如果是链表,其实点内存要大一些,因为每个结点内部是一个代表数据的域,还有一个指向下一个结点的指针,即两个哉。而数组每一个元素只有一个数据类型。因此占用要内存要小一些。但链表的优点是灵活,可以动态指定大小,而数组是死的,即你设了多少,他就是多少,所以对于数据的数量不知的情况下用链表好一些。如果数据知道多少,就数组好一些。
    具体大多少?