直接调用函数比通过bash脚本调用它需要更多的时间

时间:2017-08-29 15:38:17

标签: c linux bash arm

我在一个函数的运行时遇到了一个奇怪的问题。考虑以下两种情况:

  • 我有一个库libfoo.so,其函数为foo()

    1. 应用程序(C计划)调用foo() - X 时间
    2. 相同的应用程序调用脚本script.sh),调用相同的foo() - X / 2 时间

我通过system("script.sh")调用脚本。

我的意思是“运行时间”是里面的操作 foo()(例如,如果foo()运行某个循环,那么在情景1中它会慢一些。)< / p>

为什么让中间的脚本比直接调用foo()需要花费一半的时间?有没有办法绕过这个脚本并且 X / 2 时间?

修改

我写了一个示例代码,但我无法重现时间。该脚本仍然运行得更快,但只有1%。

//libfoo.h
void foo();

-

//libfoo.c
#include "libfoo.h"
#include <stdio.h>
#include <time.h>

void foo()
{
    clock_t t;
    t = clock();

    for(unsigned int i=0; i<1000000000; i++);

    t = clock() - t;
    double total_time = ((double)t)/CLOCKS_PER_SEC;

    printf("foo() total time: %f seconds\n", total_time);
}

-

//script.sh
./main_for_script

-

//main_for_script
#include "libfoo.h"

int main()
{
    foo();

    return 0;
}

-

//main.c
#include "libfoo.h"
#include <stdio.h>
#include <stdlib.h>
int main()
{
    printf("Calling foo() directly...\n");
    foo();
    printf("Calling foo() via script...\n");
    system("./script.sh");
    return 0;
}

-

//compilation
$CC -c -fpic libfoo.c
$CC -shared -o libfoo.so libfoo.o
$CC -L. -o main main.c -lfoo
$CC -L. -o main_for_script main_for_script.c -lfoo

-

//Running command
root@imx6:/stackoverflow# ./main
Calling foo() directly...
foo() total time: 8.794843 seconds
Calling foo() via script...
foo() total time: 8.713951 seconds

1 个答案:

答案 0 :(得分:0)

当您调用foo时,可能会共享应用于您的程序的资源,但是当您从系统调用.sh文件时,这些资源是专用的。因此,一个程序运行并调用库函数(foo)作为一个程序,与.sh文件一起启动一个新程序。可能是操作系统和线程相关的问题。