registros - ¿Qué tanto puede hacerse mal usando variables de registro en C++?
registro de alumnos en c++ (7)
Als publicó un enlace al artículo de Herb Sutter sobre palabras clave. Estoy de acuerdo con Sutter en que uno nunca debe usar el registro. No estoy de acuerdo con él sobre si el registro no tiene sentido.
Es peor que sin sentido.
He visto un código donde una variable calificada con registro se usa luego con "&". Código con docenas y docenas de variables calificadas con registro. Y lo último doozy, "registro volátil foo;"
Nunca utilice "registro".
Acabo de saber que podemos usar registros, explícitamente en programas de C ++. Me pregunto qué ocurre si declaro y uso todos los registros disponibles en un solo programa de C ++ y lo ejecuto durante un tiempo considerable. ¿Qué tan mal se comportará mi sistema y qué medidas (si las hay) tomará la OS para salir de la situación?
De todos modos, todos los registros de la CPU están a disposición de su programa, por lo que no hay nada excepcional en usarlos. OS ni siquiera lo notará.
El compilador simplemente ignorará la palabra clave de register
, por lo que no se quedará sin registros. Puede ignorarlo de todos modos: los compiladores suelen ser mucho mejores en la asignación de registros que los humanos.
La palabra clave de register
es solo una sugerencia educada para el compilador de que usted cree que esta variable será muy utilizada y que podría ser bonita. Por favor, manténgala en un registro. El compilador es libre de ignorar esta sugerencia y, de hecho, generalmente lo hará en un ambiente moderno.
register
es básicamente un vestigio de los antiguos compiladores de C, extremadamente ineficientes, que estaban disponibles hace mucho tiempo. (De hecho, los mismos compiladores que llevaron a cosas como el dispositivo de Duff execrable y otras monstruosidades). Los compiladores modernos son mucho más capaces que usted de mantener un registro de qué variables deben colocarse en qué registros y en qué puntos de ejecución. Por lo tanto, te ignorarán educadamente sin decir una palabra.
La palabra clave de register
es solo una sugerencia para el compilador y se puede ignorar. Deja que el compilador haga la optimización por ti.
Solo el número específico de Registros está disponible para su programa C ++.
Además, es solo una sugerencia para el compilador, ya que la mayoría de los compiladores pueden hacer esta optimización por sí mismos, por lo que realmente no se usa mucho el uso de la palabra clave de register
más porque los compiladores pueden o no seguir la sugerencia.
Así que la única palabra clave de register
hace con los compiladores modernos es evitar que use &
para tomar la dirección de la variable.
Para citar a Herb Sutter en esto:
Nunca escriba registro. Es exactamente tan significativo como el espacio en blanco
La palabra clave de register
indica al compilador que la variable no necesita ser direccionable en la memoria principal. Por lo tanto, el compilador puede estar seguro de que no hay punteros al valor y optimizar en consecuencia.
- Un error común: la palabra clave de registro
- Registrar palabra clave (ver la parte no específica de Microsoft)
- ¿"registrar" palabra clave en C?
El uso excesivo de la palabra clave de registro es poco probable que tenga un impacto negativo grave en los sistemas modernos. Cada hilo mantiene sus propios valores de registro durante la ejecución, y su uso de registro no tendrá ningún impacto directo en otros hilos. El compilador rechazará o ignorará el uso del registro que no puede resultar en un programa viable. El uso deficiente del registro reducirá a lo sumo el rendimiento y el sistema operativo no realizará ninguna acción especial.