【发布时间】:2016-10-31 20:52:06
【问题描述】:
我有一个非常强大的嵌入式 linux 设备,用于使用 C 从各种套接字/fd:s 收集数据。这些数据将被解析、缓冲并传递到 TCP/IP 或 UDP 套接字以转移到其他地方进行长期储存。这最后一步发生在获得足够数量的数据时,或者在触发其他一些事件时。
我的问题是:有什么理由不缓冲堆上的所有内容(而不是写入/读取某些 linux 文件描述符)
- 我的设备的唯一用途就是这种类型的数据采集
- 设备从不用于长期存储
仅使用堆听起来违反直觉,但我真的不明白为什么我们不应该在堆中存储尽可能多的东西,至少在 RAM 变得稀缺之前是这样。
【问题讨论】:
-
你有多少内存?数据进来的速度有多快?在您能够将数据传输到长期存储之前,最长的延迟是多少?您能够以什么速率传输数据?获得系统的所有参数后,就可以确定使用 RAM 是否可行。
-
为什么使用堆是“违反直觉的”?
-
是的,你是对的,现在我明白了。您根本不需要将数据存储在堆上。尽管有任何其他考虑。除非,您需要在磁盘上创建的多个不同文件共享数据,或者必须在将数据写入磁盘之前完全获取数据。这取决于您的问题中未提及的许多事情。缓冲可能有意义,但我需要了解系统的所有属性才能做出决定。