【发布时间】:2018-08-10 20:54:09
【问题描述】:
我正在开发一个 C 项目,我们必须在嵌入式 Linux 环境 (2.6.37) 中编写一些二进制文件。通常我们能够在 200-300 毫秒内写入文件,但最终文件需要 10 秒才能写入,我们不知道为什么 - 发生是非常随机的,在其他部分没有发生特殊事件系统,例如在 UI 应用中。
无论我们正在修改或写入文件的方法并在网络上进行一些研究(here 和 here 和 here),我们得出的结论是使用本机 Linux 代码编写会比纯编写更好C 即使最终可能对我们的问题没有多大帮助。目前我们正在以一种类似的方式编写,即使用这些函数:
#include <stdio.h>
const unsigned long long size = 8ULL*1024ULL*1024ULL;
unsigned long long a[size];
int main()
{
FILE* pFile;
pFile = fopen("file.binary", "wb");
for (unsigned long long j = 0; j < 1024; ++j){
//Some calculations to fill a[]
fwrite(a, 1, size*sizeof(unsigned long long), pFile);
}
fclose(pFile);
return 0;
}
我想知道的是 这将是本地 Linux 的方式来执行等效操作(并且以最快的方式)?提到的链接只讲述了复制文件,而不是简单地写给它们,所以我想可能会有更具体的功能需要使用。
感谢任何帮助(以及有关原始问题的任何提示)。
【问题讨论】:
-
很难说没有细节,但我敢打赌,问题不在于文件写入方法,而是其他问题,因为我无法想象这需要 10 秒。
-
可以并行写吗?是否有文件锁定?会不会陷入僵局?这种计算不仅仅是计算吗?这个计算需要多长时间?设备是什么?真的是本地文件系统吗?
-
80 亿个项目,8 字节/项目,8 位/字节 = 512 千兆位。在 0.2 秒内写入 512 Gb 意味着您的写入带宽为 2.5 TB/秒。这速度快得离谱,尤其是对于嵌入式系统。我根本不相信你,除非你正在构建一个嵌入式超级计算机。
-
这听起来像是“忘记这样做”。或者是 XY 问题。
-
@TobySpeight 我会说这比那更糟。假设您只是将数据写入 DRAM,而 DRAM 具有 64 位总线。 DRAM 必须以 40GHz 运行才能维持 2.5 TB/秒的速率。没有以 40GHz 运行的 DRAM,也没有可以以这种速度写入 DRAM 的处理器。使用当前技术,您需要 1024 位宽的 DRAM 总线来维持 2.5 太比特/秒的数据速率。
标签: c linux file binaryfiles file-writing