我在函數的運行時間中遇到了一個奇怪的問題。考慮以下2種情況:直接調用一個函數比使用bash腳本調用它需要更多的時間
我有一個圖書館
libfoo.so
,其中有一個功能foo()
- 應用程序(如
C
程序)調用foo()
- 需要X時間 - 相同的應用程序調用腳本(
script.sh
),調用相同foo()
- 需要X/2時間
- 應用程序(如
我通過system("script.sh")
調用腳本。
我的意思「運行時間」是操作內foo()
(例如,如果foo()
運行一些環路,則它會在方案1更慢)。
爲什麼中間的腳本比直接調用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
[email protected]:/stackoverflow# ./main
Calling foo() directly...
foo() total time: 8.794843 seconds
Calling foo() via script...
foo() total time: 8.713951 seconds
請製作[mcve]。即使您無法在閱讀器機器上重現計時,如果您提供代碼,上下文會變得更加清晰。 – Yunnosch
什麼是'foo()'?它是在[tag:c]這兩種情況下實現的,還是在第二個[tag:bash]中實現?你可以,如果你想在c中實現一個函數,那麼比起「*相同的函數*」,在... [tag:python]中做的事情真的很慢。但是爲了更好地瞭解代碼,應該發佈代碼。 –
您是否已經將此函數作爲「可加載的內置」(不管它的名稱是什麼)發送出去的? –