我有一个很大的源代码,我想分成一些模块(.h和.c文件)...因为我有一个2000行的独特源代码文件......
让我们进入问题:
- 我在该代码中使用表达式库libMathEval ...
-I使用以下命令编译大源代码文件:
gcc -DMAX_ESTRELLAS_SELECCIONADAS=1000000 crowd_2cond.c -lmatheval -o run2sec
- 要运行我使用:
./run2sec ./fparameters.txt
- konsole中的结果是:
Tiempo para lectura de ficheros, calculo de expresiones, creacion de estructuras (listas, IndiceAVL y IndiceVector) y liberacion de IndiceAVL: 3.7689 segundos
Tiempo para algoritmo: **68.7716 segundos**
Tiempo para escritura de ficheros y liberacion de memoria: 3.9501 segundos
Tiempo SECUENCIAL total (avl-serializado 2-index 2-cond Optimizado): 76.4906 segundos
程序产生正确的文件输出......
但是我想在不同的模块中分离那个大的源文件...所以我开始使用大文件的一个函数,所以现在我有两个文件(三个带标题):
crowd_2cond.c(包含main和所有函数减去移动到下一个文件entrada.c的函数)
entrada.c(标题为entrada.h):只包含一个大函数...
因此,要生成可执行文件,请使用以下命令:
gcc -c entrada.c
gcc -c -DMAX_ESTRELLAS_SELECCIONADAS=1000000 crowd_2cond.c
gcc -o run2sec crowd_2cond.o -lmatheval entrada.o
再次运行我用过:
./run2sec ./fparameters.txt
结果显示:
Tiempo para lectura de ficheros, calculo de expresiones, creacion de estructuras (listas, IndiceAVL y IndiceVector) y liberacion de IndiceAVL: 3.7941 segundos
Tiempo para algoritmo: **1.4577 segundos**
Tiempo para escritura de ficheros y liberacion de memoria: 3.6116 segundos
Tiempo SECUENCIAL total (avl-serializado 2-index 2-cond Optimizado): 8.8634 segundos
该程序生成一个文件输出,在这种情况下不正确...以粗体显示的时间不同......
两个执行之间的代码差异只是entrada.c中函数的分离,我还没有触及任何更多...
希望有人可以帮助我 谢谢大家提前 曼努埃尔。
答案 0 :(得分:1)
您对初始化的建议让我发现错误。
问题出在你说初始化不好的时候。
#ifndef ENTRADA_H
#define ENTRADA_H
#include <stdlib.h> ---This was not in the entrada.h file---
#include <stdio.h>
#include <string.h>
#include "tipos.h"
ParametrosEjecucion leerParametrosEntrada(int nparam, char *argv[], int num_lineas);
#endif
在“leerParametrosEntrada”中,我使用atof将字符串转换为float,如果你不包含stdlib.h文件,这个函数似乎表现不好。
包括它之后一切正常......
感谢受雇俄语
答案 1 :(得分:0)
此链接:
gcc -o run2sec crowd_2cond.o -lmatheval entrada.o
不等同于原始版本。为了使它完全等效,请尝试:
gcc -o run2sec crowd_2cond.o entrada.o -lmatheval
链接行does matter上的对象和库的顺序。
我不确定这会解决你的问题,但这是我能看到的直接差异。
如果问题仍然存在,可能是您在计算中使用了一些未初始化的值,而您从原始编译偶然获得的值会产生正确的答案。在valgrind下运行您的程序,以确保没有使用未初始化的值。