Registrar variables

votos
2

Estoy teniendo un código C ++ que involucra mucha recursividad. Estoy pensando en usar la clase de registro para mis variables. ¿Crees que al hacerlo estaré guardando la memoria de la pila y mejoraré el rendimiento

Gracias

Sameer

Publicado el 02/04/2009 a las 11:07
fuente por usuario
En otros idiomas...                            


5 respuestas

votos
6

No, creo que probablemente no tendrá ningún efecto. Los compiladores modernos suelen ser mucho mejores en el uso del registro de programación que los humanos, y probablemente ignoren la palabra clave "registrar".

Una vez dicho esto, la única forma real de averiguarlo es escribir un código y medir su rendimiento con la palabra clave register y sin él: el cambio de código es trivial.

Respondida el 02/04/2009 a las 11:09
fuente por usuario

votos
1

Puede cambiar su algoritmo para usarlo std::stacky alguna clase personalizada que contendrá el estado del algoritmo en lugar de la pila de funciones y la llamada de recursión.

Respondida el 02/04/2009 a las 11:10
fuente por usuario

votos
1

Si recuerdo correctamente, la palabra clave register no garantiza que la variable se almacene en un registro, pero indica que podría y, de ser posible, debería usar un registro; sin embargo, si un registro no está disponible, entonces todavía va a terminar en la pila .

Microsoft C ++ ignora la palabra clave y toma sus propias decisiones. Me gustaría ver su algoritmo primero para las ganancias de rendimiento.

Respondida el 02/04/2009 a las 11:13
fuente por usuario

votos
0

El compilador está 100% en honor a su registersolicitud. Claro, puede conservar el espacio de la pila si logra exprimir una o dos variables locales en registros, pero no (por supuesto) si esos valores deben conservarse en todas las llamadas, ya que entonces deberán volver a colocarse en la pila.

Respondida el 02/04/2009 a las 11:14
fuente por usuario

votos
8

Podría apostar que el compilador NO va a cumplir su pedido. Digamos que tiene una variable local y que recursivamente llama a la función 100 veces. Si se tratara de respetar todas las variables automáticas de la palabra clave 'register', se necesitarían 100 registros de hardware solo para esa variable (todas las variables están activas en la llamada número 100).

El rendimiento es un problema difícil. Analice dónde está realmente gastando el tiempo el programa y trate de optimizarlo allí, pero tenga cuidado: algunas decisiones pueden terminar sin ganancia, otras pueden terminar peor. Como se mencionó anteriormente, los compiladores son realmente buenos en lo que hacen. Forzar una variable en un registro significa un registro menos para el resto de las variables a usar.

Respondida el 02/04/2009 a las 11:31
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more