C/Visual C - register como parametro????

 
Vista:

register como parametro????

Publicado por Nelek (816 intervenciones) el 14/02/2007 12:14:03
Hola,

me he topado con una funcion que tengo que entender para seguir con mi proyecto, pero me tiene algo desconcertado y la ayuda del MSDN no me aclara gran cosa. La funcion es:

static double
sfu( register Point * a, register Point * o, double s )
{
register double y = (s > o->y) ? (double) (o->y - a->y) : (s - a->y);

return (double) a->y * (o->x - a->x) + y * ((o->y - a->y) - y/2) / o->d;
}

alguien me puede explicar para que sirve el register y que beneficios/perjuicios se saca usandolo? Ya se que es algo dificil sin el resto del programa donde aparece esta funcion, pero cualquier explicacion sera bien recibida.

Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Algo entendido

Publicado por Nelek (816 intervenciones) el 14/02/2007 12:28:59
Bueno, leyendo mensajes antiguos, he logrado enterarme un poco de para que sirve el "register" pero sigo sin tener claro hasta que punto es o no es necesario para mi aplicacion. Me explico:

Despues de disenyar un proyecto para logica FUZZY con mi anterior proyecto, debo lograr traducirlo a un codigo portable segun un esquema predefinido (de donde sale la funcion puesta arriba) para que pueda ser interpretado por un automata de Siemens STEP 7.

Mas o menos tengo ya claro lo que necesito del manjeo de ficheros y de la estructura que tengo que usar, pero cuando miro el programa traductor y el que realiza la conexion con el automata, me salen funciones asi y me desmontan.

Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:register como parametro????

Publicado por fernando.gomez (1603 intervenciones) el 14/02/2007 16:37:35
El modificador "register" hacer que la variable declarada se guarde... en el registro del procesador. Me explico. El procesador tiene unos, er..., "lugares" donde se pueden guardar algunas variables. Esto es así para que se puedan almacenar valores en el procesador y no en la memoria. Esto hace que el acceso a los valores sea más rápido. Por supuesto, si no hay espacio en el procesador, pues se omite la instrucción y se guarda en memoria de forma normal.

En teoría, deberías usar "register" para variables que requieran un acceso rápido o que se empleen mucho. Las variables contador de las iteraciones suelen ser candidatas de facto para guardarse en register. Algo como lo siguiente valdría la pena:

for (register int i = 0; i < 10000; i++) { ... }

porque i se va a accesar 10000 y pues sería más rápido que estuviera en el procesador en lugar de la memoria. Pero bueno, hoy en día el tiempo que uno se ahorra es poco realmente.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Gracias y una cosa adicional

Publicado por Nelek (816 intervenciones) el 14/02/2007 17:07:14
Hola Fernando, gracias por contestar,

me habia imaginado algo asi por lo que lei en mensajes antiguos. El programa que estoy ojeando para hacer que el mio cumpla la misma estructura es de 1995, asi que en aquella epoca si que debio de ser una diferencia, pero hoy en dia con los avances que han habido...

Por otro lado...

Voy tener que andar usando los typedef para poder clarificar un poco las cosas pq necesito guardar datos de distintos tamanyos, asi que tengo pensado crear estructuras. La duda, que parecera de novato (he ido aprendiendo conforme necesito las cosas), es:

El mejor sitio para colocarlos?

Yo tenia pensado poner las definiciones de las struct y los typedef aqui:

/////////////////////////////////////////////////////////////////////////////
// The only object CFPSApp
/////////////////////////////////////////////////////////////////////////////

CFPSApp theApp;

// AQUI VOY A PONERLOS
/////////////////////////////////////////////////////////////////////////////
// CFPSApp global definitions
/////////////////////////////////////////////////////////////////////////////
typedef struct {
//
} MyStruct;

//...

Estaria bien? O es mejor crearse y anyadir un *.cpp (p.ej: Globales.cpp) para mantener el maximo de "limpieza" posible?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Gracias y una cosa adicional

Publicado por fernando.gomez (1603 intervenciones) el 14/02/2007 19:16:32
Pues de entrada yo no pondría los typedefs ni definiciones de estructuras ni clases ni enumeraciones ni constantes en un cpp, sino más bien en un header.

Si el typedef es particular de una clase, yo lo pongo dentro de la clase. Si lo va a usar alguien más, entonces sí lo pongo en un header aparte.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar