mpoloureiro
(usa Debian)
Enviado em 28/03/2011 - 17:37h
Ola a todos!
Recentemente me deparei com um problema na hora de executar um programa em c.
Tenho um programa grande, composto de muitas subrotinas. Dentro de uma delas (Sub1),
existe um loop que chama uma outra subrotina (Sub2) diversas vezes. O fato é que,
recentemente precisei fazer uma modificação na Sub2 e criei novos vetores. O problema
é que agora, apos compilar o programa, a execuçao do mesmo esta sendo feita usando
o "sys time" do processador (antes era o "user time").
Vou tentar especificar o problema em codigo.
-------------------------------------------------------------------------------------------------
void Sub1 ();
void Sub2 ();
void main ()
{
...
Sub1();
...
}
void Sub1()
{
...
for (i=0;i<1000000;i++)
{
...
Sub2 ();
...
}
...
return;
}
void Sub2 ()
{
int *v1,*v2,...;
v1=malloc...
v2=malloc...
for (i=0;i<1000000;i++)
{
v1[i]=0;
v2[i]=0;
...
}
free(v1);
free(v2);
...
return;
}
-------------------------------------------------------------------------------------------------
Note que Sub2 apenas cria um(s) vetor(es) (sim, os tamanhos que eu uso sao da ordem de 1.000.000), atribui
0 a todos os indices e fecha o(s) vetor(s).
Supondo que eu precise criar dois vetores, v1 e v2. Atribuindo tipos diferentes a cada um (ex: int e unsigned long),
o problema NAO ocorre, ou seja, todo o tempo de processamento é de "user time". Utilizando tipos iguais a execuçao
passa para "sys time"
Se ao invés de criar os vetores em Sub2 eu simplesmente cria-los em Sub 1, o programa volta a rodar integralmente
em "user time".
-------------------------------------
void Sub1()
{
...
for (i=0;i<1000000;i++)
{
...
int *v1,*v2,...;
v1=malloc...
v2=malloc...
for (j=0;j<1000000;j++)
{
v1[j]=0;
v2[j]=0;
...
}
free(v1);
free(v2);
...
}
...
return;
}
-------------------------------------
Espero ter conseguido me fazer entender.
Voces podem me ajudar a esclerecer este "fenomeno"? Ou mesmo me dizer se existe algum tipo de "efeito"
quando um programa roda utilizando o "sys time"?
Obrigado