1

我正在寻找适当的方法来使用 posix 系统上的标准库使用 C 程序临时存储可能非常大的字符串。该字符串是 C 函数的逐行输出的顶点。在最后一次调用这个函数之后,我想进一步处理(输出)数据。在分配大量内存和创建临时文件之间是否存在简单的折衷?例如,我可以想象在需要数据时写入管道并再次从该管道读取。但我不确定在这种情况下如何在内部处理数据,以及它是否比临时文件更受欢迎。

4

2 回答 2

1

这主要取决于您需要对数据做什么。如果您需要随机访问它(例如,如果您需要对其进行排序),您可能会发现如果文件都在内存中,这会容易得多,尽管可能会使用大量内存。

特别是如果您能够按顺序访问数据来处理它,如果您希望数据很大,我通常会推荐一个临时文件。

除非您创建另一个线程以在主线程写入数据时从管道中读取数据,否则管道不会帮助您。否则,您将很快填满管道的缓冲区并阻塞(实际上是死锁)。

于 2012-05-14T16:34:25.210 回答
0

您可以决定(根据您的评论,您应该根据具体情况决定)是将其保存在内存中还是写入磁盘。如果您注意到数据增长超过某个阈值,您将写入磁盘并切换剩余数据的放置方法。

管道不是一个好主意,因为它是一种进程间通信方法,具有非常小的存储大小(自 Linux 2.6 以来约为 64kiB,在 2.4 中,它甚至更少 - 4 kiB 左右)。

于 2012-05-14T16:42:47.623 回答