1

这一切都在 Linux 和 C 中。

我有一个用户空间库函数,最多需要调用设备驱动程序的读/写函数 8 次。(我正在编写库和设备驱动程序。)我看到了两种实现方式:

  1. 让库调用读/写所需的次数。
  2. 让驱动程序处理读取/写入设备所需的次数。

驱动程序已经根据先前的 ioctl 调用知道所需的次数,无论如何都会发生。选项 1 需要在用户空间和内核空间之间进行更多切换,我知道这会降低性能。另一方面,选项 2 会产生问题。对于读取调用,传递回用户空间的缓冲区最多将大 8 倍,除非可以一次将 1 个读取传递回用户空间,而无需在两种模式之间切换。除非每次都写入相同的数据,否则 write 调用也会有同样的问题。因此,选项 2 的最坏情况需要比选项 1 来回传递的缓冲区大 8 倍。

最终,哪一个更有效?

4

1 回答 1

0

正如评论员所建议的那样,如果您关心效率,那么没有任何猜测可以替代基准测试和分析。“效率”可能会受到大量因素的影响,分析您的每个选项是确定最佳选项的正确方法。

于 2014-07-21T22:44:21.977 回答