c - 如何最小化程序启动时间

标签 c linux performance raspberry-pi

我用 C 语言编写了一个简单的工具,它使用 Raspberry Pi 的代码块,通过 SPI 总线执行命令。 Codeblocks 使用 GCC 编译器。 问题在于,虽然实际的 SPI 事务需要个位数毫秒,但总的程序执行时间可能为 100 毫秒或更多。代码中的实际程序执行也不会花费很长时间,因此大概都被设置流程等消耗掉了。

这里有什么好的方法可以最大限度地减少启动延迟? Raspberry pi 几乎不是速度守护进程,程序需要以 SPI 库所需的 root 权限执行。可执行文件大约为 70kB,因此在 glacial RPI Sdcard 接口(interface)(4kB block 读取大约 6MB/s)单独加载可执行文件大约需要 12ms。我想我总是可以为它创建一个小的 ramdisk。

Sudo 单独执行大约需要 50 毫秒,因此实际上启动根 session 会将执行时间缩短到 30-40 毫秒。有没有什么方法可以让 sudo 发生得更快,这样我就不必为此打开根控制台......?

最佳答案

对于 sudo,我认为设置 SUID 位是一个好的开始。

通过将二进制文件的这个位和所有权设置为 root,您可以允许普通用户运行您的文件而无需引用 sudo

chown root:root your_binary
chmod u+s your_binary

当然,您应该了解使用 SUID 的所有可能的危险,尤其是当您在应用程序中接受用户输入或参数时。这是我找到的第一个命中:http://unix.worldiswelcome.com/why-suid-programs-are-dangerous

另一方面,SUID 并不。就像 goto 一样不错。它可以以不好的方式使用,但机制就在那里,它可能会解决你的问题。

编辑:第二个想法 - 您是否动态链接到许多库?据我所知,这可能会造成一些延迟。也许你可以瞄准静态链接?但是,老实说,我认为您也可能因为内存/缓存使用率不佳而降低性能,我不确定。

关于c - 如何最小化程序启动时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46001263/

相关文章:

PHP MySQL 加载搜索查询需要 0.8 秒到 3 秒,如何加快速度

python - 加速循环以使用另一个数组中最接近的值填充数组

java - 如何计算Java中可能具有相同计数的最重复值

c - 如何在TI ccs6.0中创建自己的头文件

c - 不同返回类型的 gcc 警告

c++ - 为 x86 系统编译 Readline(静态模式)

Java 为什么默认的 Java 版本是 1.7,而不是 1.8

c - unsigned long long 到字符串转换

c - 在 C 程序中的 Xcode 中提供命令行参数

regex - 如何找到开头单词与结尾单词相同的句子?