“Conocimiento software>Software de Productividad

¿Cuál es la diferencia entre los registros de guardado de llamadas y Callee en términos de su impacto en la eficiencia del rendimiento del programa?

2015/9/7
La diferencia entre los registros ahorrados con llamadas y salvado de la Callee afecta significativamente el rendimiento y la eficiencia del programa, principalmente a través de la sobrecarga de los valores de registro de ahorro y restauración durante las llamadas de funciones.

Registros guardados de llamadas (también conocidos como registros volátiles):

* Definición: Estos registros son responsabilidad de la persona que llama (la función que realiza la llamada) para preservar si se necesitan sus valores después de que regresa la Callee (la función que se llama).

* Mecanismo: Antes de llamar a una función, si la persona que llama tiene valores importantes almacenados en registros ahorrados a la persona que llama, debe empujar esos valores a la pila (o guardarlos en otra parte de la memoria). Después de que el Callee regresa, la persona que llama puede volver a los valores guardados en esos registros.

* Impacto en el rendimiento:

* por encima en el sitio de llamadas: Los registros ahorrados a la persona que llaman conducen a la sobrecarga en la función de llamadas. Cada llamada puede requerir registros de empuje y estallar, incluso si la Callee en realidad no usa esos registros.

* potencialmente menos por encima si Callee es simple: Si el Callee es pequeño y no necesita usar muchos registros, es posible que la persona que llama no necesite guardar nada, haciendo que la llamada sea relativamente eficiente. La persona que llama solo guarda registros que sabe que necesita * y * El Callee podría potencialmente clobber.

* Adecuado para valores de corta duración: Bueno para las variables que solo necesitan vivir en un pequeño alcance, ya que guardar/restaurar se vuelve menos preocupante.

* Ejemplo: En muchas convenciones de llamadas x86-64 (como el sistema v amd64 abi), registros como `Rax`,` rcx`, `rdi`,` rsi`, `r8`,` r9`, `r10`,` r11` (y registros de puntos flotantes como `xmm0-xmm15` en algunos sistemas son los sistemas llamadas.

Registros salvados de Callee (también conocidos como registros no volátiles):

* Definición: Estos registros son responsabilidad del Callee (la función que se llama) para preservar. Si el Callee quiere usarlos, debe guardar sus valores originales al comienzo de la función y restaurarlos antes de regresar.

* Mecanismo: El Callee empuja los valores originales de estos registros a la pila al comienzo de su ejecución. Antes de regresar, el Callee vuelve a subir esos valores a los registros, restaurándolos efectivamente a su estado original.

* Impacto en el rendimiento:

* por encima de la Callee: Los registros protectores de Callee introducen sobre la cabeza dentro de la función Callee. Cada Callee que usa estos registros debe realizar guardado y restauración, independientemente de lo que esté haciendo la persona que llama.

* Mejor para Callee usando muchos registros: Si el Callee necesita muchos registros, el uso de registros ahorrados con Callee puede ser más eficiente que los registros ahorrados a la persona que llaman. La persona que llama se garantiza que esos registros se conservarán sin tener que hacer nada.

* Adecuado para valores de larga vida: Bueno para las variables que necesitan vivir en un alcance de funciones grandes, ya que la sobrecarga de guardar/restaurar se amortiza durante la mayor duración de su uso.

* Ejemplo: En el sistema x86-64 v AMD64 ABI, se registran como `rbx`,` rsp`, `rbp`,` r12`, `r13`,` r14`, `r15` son ahorrados a Callee. `RSP` es especial (puntero de pila), y` RBP` (puntero base) a menudo se usa para la administración y la depuración de marcos de la pila.

Diferencias clave e implicaciones de rendimiento:

| Característica | Registros guardados de llamadas | Registros protegidos por Callee |

| ---------------- | ---------------------------------------------------------------------------------------

| Responsabilidad | La persona que llama para guardar y restaurar si es necesario antes de llamar a una función. | Callee para ahorrar y restaurar si la Callee los usa. |

| Overhead | Principalmente en la función de llamadas (potencialmente sin sobrecarga si la persona que llama no necesita esos registros). | Principalmente dentro de la función llamada (gastos generales si la persona que llama necesita o no los registros conservados). |

| Mejor uso | Cuando la persona que llama necesita preservar los valores en solo un pequeño subconjunto de llamadas. | Cuando el Callee es grande y es probable que use muchos registros, evitando que la persona que llama tenga que ahorrar muchos registros posibles. |

| Ejemplo (x86-64) | `RAX`,` RCX`, `RDI`,` RSI`, `R8`,` R9`, `R10`,` R11` | `RBX`,` RSP`, `RBP`,` R12`, `R13`,` R14`, `R15` |

¿Cuál es mejor?

No hay un enfoque universalmente "mejor". La elección óptima depende de los detalles de las convenciones de llamadas, la estructura del programa, la frecuencia de las llamadas de funciones y el tamaño y la complejidad de las funciones. Las estrategias de asignación de registro utilizadas por los compiladores y programadores tienen como objetivo minimizar la sobrecarga de ahorrar y restaurar registros eligiendo de manera inteligente qué registros se utilizarán para diferentes fines.

* llamadas pequeñas frecuentes: Podría ser preferible a la persona que llame, ya que la persona que llama solo guarda lo que necesita. El Callee puede usar los registros sin ningún costo de ahorro/restauración.

* Llamadas grandes infrecuentes: Se puede preferir a la Callee Saved si la Callee usa muchos registros. El Callee tomará el costo de ahorrar/restaurar esos registros, pero la persona que llama se libera de tener que anticipar qué registros deben salvarse.

En resumen:

La elección entre los registros ahorrados a la persona y la calle que llaman implica una compensación entre los gastos generales en el sitio de llamadas y la sobrecarga dentro de la función llamada. La asignación de registro efectiva y las convenciones de llamadas tienen como objetivo minimizar este gasto general para mejorar el rendimiento del programa. Los compiladores y los programadores de ensamblaje deben comprender estos conceptos para optimizar el código para la eficiencia. El ABI (interfaz binaria de aplicación) define qué registros se ahorran a la persona que llaman y se ahorran a Callee para una arquitectura y sistema operativo específico.

Software de Productividad
Cómo girar texto en Access 2007 Informes
Cómo configurar una agenda electrónica
Terminal Server no se puede instalar la impresora Cuando los registros de usuario en
Cómo cambiar la fuente predeterminada en Adobe 8
Computer Training Simulación
OneNote Tips
Cómo obtener la contraseña de administrador Si se inicia la sesión
Cómo activar el Auto Recovery 2007 en Microsoft Word
Conocimiento de la computadora © http://www.ordenador.online