gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 12:21:05 24 4
gpt4 key购买 nike

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

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

    1. 应用(C 程序)调用 foo() - 花费 X 时间
    2. 同一应用程序调用一个脚本 (script.sh),该脚本调用相同的foo() - 占用X/2时间

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

我所说的“运行时间”是指 inside 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
root@imx6:/stackoverflow# ./main
Calling foo() directly...
foo() total time: 8.794843 seconds
Calling foo() via script...
foo() total time: 8.713951 seconds

最佳答案

会不会是你程序申请的资源在你调用foo时是共享的,而当你从系统调用.sh文件时是专用的。因此,一个运行并调用库函数 (foo) 的程序与一个使用 .sh 文件启动新程序的程序不同。可能是操作系统和线程相关的问题。

关于直接调用函数比通过 bash 脚本调用它花费更多的时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45943197/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com