我在一个函数的运行时遇到了一个奇怪的问题。考虑以下两种情况:
我有一个库libfoo.so
,其函数为foo()
C
计划)调用foo()
- X 时间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
答案 0 :(得分:0)
当您调用foo时,可能会共享应用于您的程序的资源,但是当您从系统调用.sh文件时,这些资源是专用的。因此,一个程序运行并调用库函数(foo)作为一个程序,与.sh文件一起启动一个新程序。可能是操作系统和线程相关的问题。