Lo único que sé sobre el mecanismo de cómo C pasa los valores es que se realiza a través de un registro o la pila.¿Cómo se pasan los argumentos de función en C?
¿Desea registrarse o apilar? ¿Exactamente cómo?
Lo único que sé sobre el mecanismo de cómo C pasa los valores es que se realiza a través de un registro o la pila.¿Cómo se pasan los argumentos de función en C?
¿Desea registrarse o apilar? ¿Exactamente cómo?
Ambos. Y las convenciones variarán según la plataforma.
En x86, los valores generalmente se pasan por la pila. En x64, se prefiere pasar por el registro.
En todos los casos, si tiene demasiados parámetros, algunos tendrán que pasar por la pila.
Consulte x86 calling conventions
También se debe tener en cuenta que existen diferencias en las convenciones de llamadas incluso para una arquitectura determinada. Compare 'cdecl' (usado en Linux?) Y' stdcall' (WinAPI?), Por ejemplo. –
De acuerdo. La parte inferior de esa página wikipedia tiene un gráfico que muestra las diferentes convenciones en diferentes sistemas operativos e incluso dentro del mismo sistema operativo. – Mysticial
@Mystical Es un buen enlace, pero creo que se debe incluir alguna información adicional junto a la respuesta. –
Normalmente (algunos compiladores lo harán de manera diferente como se ha señalado) para la función normal de las llamadas que se pasan en la pila. Por lo general, se trata de una serie de instrucciones de inserción que simplemente colocan los datos en la pila.
Existen casos especiales, como llamadas al sistema, donde los parámetros se pasan a través de instrucciones de ensamblaje y registros. En los casos de hardware, se pasan a través de registros o incluso ciertas señales de interrupción que, en consecuencia, escriben en los registros.
En arquitecturas con un gran número de registros, generalmente se pasan a través de registros como algunas arquitecturas RISC y de 64 bits.
Técnicamente, este es un detalle de implementación, por lo que cada compilador de C puede elegir pasar los argumentos de la función como lo desee. – jwodder