在我的可执行文件中内联帮助会降低加载/执行速度吗?

时间:2017-11-01 10:54:14

标签: c performance

我编写了一个用C语言编写的程序,用于命令行使用,预计经常使用散布在shell脚本中的程序有专门的帮助,maninfo无法提供帮助使用ANSI转义序列来表示颜色。

包括转义序列在内的纯文本帮助重18.7 KiB。内联作为零终止字符串(以及根据请求显示它的if子句)的可执行文件重39.0 KiB,没有它重19 KiB。 (编译时没有优化或调试选项。)

我正在考虑将帮助内联到可执行文件中,以便用户轻松访问它,而不必记住单独的文件名和位置cat到他们的终端。 (可执行文件将位于shell搜索路径中,因此不存在问题。)

但我担心加倍会降低加载/执行速度。

OTOH我似乎已经读过/听说操作系统会缓存已加载的可执行文件,所以我不用担心这个。

另一种选择是制作另一个单独的-help可执行文件(重量为28 KiB,但我不需要担心,因为它不经常使用)。

对于这种情况,有没有最佳做法?请指教。谢谢!

1 个答案:

答案 0 :(得分:3)

你无需担心。

Linux对可执行文件使用请求分页。这意味着首次启动可执行文件时,不会从磁盘读取任何内容。仅当发生页面错误(意味着程序试图访问尚不存在的内存)时才会实际从磁盘读取页面。

一些用Go编写的二进制文件大小几十兆字节,并且没有明显的启动延迟。

我鼓励您实际尝试每种方法并对启动延迟进行基准测试。