动态数组的大小问题

mo01 2002-09-26 03:32:12
CArray<float,float>的大小有限制吗,另外我发现用动态数组速度明显比静态数组慢很多,有什么办法可以解决吗,
再问一个问题:float data[]这样一个静态数组最多可以定义多大
...全文
218 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
aileen_long 2002-09-27
  • 打赏
  • 举报
回复
动态数组也好、链表也好,其它一些数据结构也好,没有绝对的好坏,它们的优劣完全取决于你的需求以及实现的方法。其实很多情况下,动态数组要比链表更有效率,因为动态数组支持随机访问,而链表不支持。比照楼主的情况,似乎新数据插入序列末端的可能性更大一些,这样的话,设计良好的动态数组也不需要在每次插入新元素时都要移动老的元素。建议楼主可以试一下STL的vector,它采用一种所谓“分摊处理”,在大多数时候都会准备足够的内存,以便于新元素的插入,而不需要临时去分配,把时间花费在元素的搬动上。至于满不满足你的需要,试过便知。
mo01 2002-09-27
  • 打赏
  • 举报
回复
谢谢各位这么热心,我的程序是一个工控软件,从单片机采集数据(20ms一次)
需要把数据放到数组中用来计算和绘制图象,如果数组太小的话可能会出现
越界,大家有什么建议

各位有空的话也帮忙看以下这个帖子,问了有好几天了
http://www.csdn.net/expert/topic/1042/1042433.xml?temp=.6194879
liugy 2002-09-26
  • 打赏
  • 举报
回复
如果是实时的处理的话,不要用动态数组
一个Add()至少10ms,到后面就更慢了,
如果从动态数组中取数的话,速度还可以
runnersun 2002-09-26
  • 打赏
  • 举报
回复
其实链表比数组更费内存,其访问速度慢,有时需要快速访问内存时用数组比较合适,这要看你的具体情况而定。在win32中最大可访问4G。
spwnihao 2002-09-26
  • 打赏
  • 举报
回复
用链表呀,CObList,自己写也行啊,当然自己写的链表更快了
oldworm 2002-09-26
  • 打赏
  • 举报
回复
CArray<float,float>
微软类似的东西内部很多是这样处理的,先分一定内存,如能够存放100个单元,当存储数据达到100个以后它可能是再增加100 * 2个单元,即200个单元,如此类推,但是我们必须注意到,当增加节点容量的时候交换空间随着节点数目的增多也增多,这种处理方式效率低下,对于一个高性能的应用程序,你可以先设置好对象的初始容量,或者不用这些东西。
liangbch 2002-09-26
  • 打赏
  • 举报
回复
如果data是全局变量,那么这个数组可以定义很大,而且速度很快,
如果data是局部变量,那么这个数组不能超过几十k,否则栈会溢出。
动态数组使用按需分配内存,在使用过程中,如果需要增大数组的大小,那么系统会分配一个更大的内存、然后复制旧的数据到新的内存空间,然后释放旧的内存,内存的分配可能伴随着碎片合并等过程,所以速度不快。
如果这个数组需要很大,建议使用动态分配的方法,一次分配到位,这样速度就不会慢了。
float *buff =new float[1000];
for (i=0;i<1000;i++)
buff[i]=0;

row 2002-09-26
  • 打赏
  • 举报
回复
CArray动态数组是非常慢的
你可以采用CList链表来实现,效果一定比CArray强
float data[]可以定义成千上万的大小
就看你内存有多大了 呵呵

16,470

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧