我注意到根据 -fPIC 标志,我的 C 程序的性能存在很大差异。当我使用它时,我的程序比没有它时慢 30%。我将它与调用 C 函数的 Lua 程序进行比较(所有繁重的计算都完成了)。首先,我使用 C 函数创建了一个共享对象,因此必须使用 -fPIC 标志。性能与带有 -fPIC 标志的 C 代码非常相似。所以现在我尝试在没有 .so 的情况下做同样的事情:我从 C 调用 Lua:
int main()
{
lua_State* L = luaL_newstate();
luaL_openlibs(L);
lua_register(L, "my_c_function", my_c_function);
luaL_dofile(L, "my_lua_program.lua");
lua_close(L);
return 0;
}
但是无论我是否使用 -fPIC 标志,这里的性能都是相同的(并且与使用 .so 的方法相同)。我期待在没有 -fPIC 标志的情况下有所改进......关于如何进一步调查它的任何建议?第二种方法是否仍然创建与位置无关的代码,这就是性能相似的原因?谢谢!
更多信息,如评论所建议:我使用 -O3 标志、gcc 4.7.2、Ubuntu 12.04.2、x86_64。是的,我对这么大的开销感到非常惊讶……我的程序正在计算 Mandelbrot 分形。所以有两个循环遍历 x 和 y,我在 C 中的函数是 isMandelbrot:它需要迭代次数并返回 bool:是否属于 Mandelbrot 集。我将共享对象与“require”一起使用。