2

我正在用C编程并使用 bash 作为我的 shell。目前,我正在尝试在运行程序时进行优化。该程序的一般要点是输入一些参数,读入数据文件,然后程序根据输入参数和文件中的数据运行一些计算。我经常一次运行此代码 100 次,只更改每次运行的输入参数,而不是文件中的数据。我使用xargs带有各种参数的可执行文件的 shell 脚本来执行此操作。

printf "%s\n" {0..n} | xargs -P 8 -n 1 ./program

问题是我有一个非常大的数据文件,需要大约 1 秒才能读入。这是在每次调用可执行文件时完成的,但是,读入的数据通常不会改变!因此,我相信我可以通过以某种方式保存这些数据来节省大量时间,以便可执行文件的其他调用可以使用已经读入的数据,而不是浪费时间读入数据本身。

我在想也许可能有另一个程序读取数据,然后保护数据地址并将其发送到我当前的可执行文件。在可执行文件完全运行完成后,这将被转发回新程序,然后该程序会释放数据。这可能吗?还是有其他更好的方法?

4

2 回答 2

1

您可以尝试将文件存储在共享内存中:/dev/shm

例如:ls > /dev/shm/ls-输出

./program < /dev/shm/ls-输出

不确定这是否是您正在寻找的东西,但我猜沿着这条线的东西可能会有所帮助。

于 2013-07-12T20:59:30.573 回答
0

我不知道您的问题的答案,但是如果您只能哄骗文件系统将文件保存在共享内存段中,然后发布访问内存中文件所需的指针和段标识符,它将解决您的问题。 请参阅此内核文档,以及文档。他们可能会有所帮助。

此外,一旦您解决了问题,请将您的解决方案作为答案发布,并在的答案下方发表评论,以便 Stack Overflow 标记我回到这里并再次查看。

于 2013-07-12T21:00:10.087 回答