完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
最近在写一个处理大量数据的采集程序,遇到一个问题,请大神们解答解答。
如果我定义一个一维数组,但我事先不知道有多少元素,所以只能初始化为一个元素。然后在采集数据期间,不断的在这个数组后面加入元素。那么问题来了,这个数组会不会溢出?比方说,这个数组加到第十个元素时,在内存中,这个数组所对应的内存块后面有另外的变量(例如另一个数组的元素),此时如果再向前面所说的数组的最后面加入元素,会不会把另一个数组的元素给覆盖掉? 或者哪位大神给解答一下,数组的工作原理。数组最后一个元素有没有下一个元素的指针? |
|
相关推荐
9个回答
|
|
这个已经不是数组的概念了吧,数组的内存是连续分配的,逐渐增加在内存中如果有大片连续的内存可以做到,但是一旦超过最大连续范围,使用分配函数就会失败。如果没有使用内存分配函数,那么程序就会崩溃。有指针的做法是链表,但是内存会增加很多额外开销。数组的最后一个元素的下一个没定义进去是不能直接使用的。
最佳答案
|
|
|
|
新手,只能帮顶了,打酱油的
|
|
|
|
谢谢你的回答。 1. 如果是这样的话,是不是必须要初始化才能解决问题? 2. 对于我上面提到的不能初始化的问题,有什么解决办法(链表那个东东怎么用?)? |
|
|
|
|
|
|
|
采集大量数据,首先要明确数据到底多大,1M,10M,1G,10G? 明确数据的意义,是不是每一个数据都不能丢失?例如采到1G时,如果第一个数据还有意义,那就不能丢失,但是如果采集到1M的时候前面的数据已经没有用了,那就可以覆盖。 如果真是不能丢失,那么也不能使用数组来存储所有数据,因为内存最终还是会溢出。这种一般需要将数据写入文件,后面来的数据在文件后面追加。但即使是文件,也有系统文件、硬盘的限制,就算1T的硬盘,理论上也可以写满。 使用链表,也存在内存耗尽的问题。 所以这个想法在最初的时候就已经存在问题了,也就是常说的所有问题和BUG都是设计出来的。 个人认为,应该使用队列加文件的方式进行处理。 做好一个缓冲队列,收到数据的时候将数据写入文件内部就可以了。队列的大小可以预先设计好,要求能满足写文件的速度。如果采集速度很快,那么内存溢出这个问题几乎无解。 举例,每隔1秒采集1M的数据,那么可以确定数据的大小,数组就使用1M,采完就1M数据加入一个队列,然后使用另一个的线程去将1M的数据写入硬盘文件。采集的速度不能操作写文件的速度。其实这就是系统采集数据的最大速度,也就是一个性能指标了。 |
|
|
|
你预先设定一个范围,开辟一个动态缓冲区,满了覆盖就行,如果全面的有用,满的就搬到别处去存储。
|
|
|
|
新手,只能帮顶了,打酱油的
|
|
|
|
学习学习
|
|
|
|
学习学习 ,只能帮顶了,打酱油的
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
580 浏览 0 评论
1670 浏览 1 评论
用udl里的字符串信息在局域网内其他电脑连接sql数据库为什么为出现连接失败拒绝访问?
2392 浏览 2 评论
为什么同一个队列引用的全局变量,运行在两个子vi中发现队列数据丢失了
1851 浏览 0 评论
2036 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-4 03:31 , Processed in 0.718735 second(s), Total 92, Slave 73 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号