Pregunta

¿Hay una buena razón?

Son sus funciones internas (no exportado) también convención stdcall?

¿Fue útil?

Solución

Fue una adaptación a la convención de llamada Pascal de código de 32 bits. Pascal fue el convenio de llamada para sistemas operativos de 16 bits como OS / 2 y Windows 3. ¿Por qué Pascal fue escogido es un poco de una conjetura, aunque yo era un pequeño cachorro en ese entonces, pero es ligeramente más eficiente. ¿Qué importaba atrás cuando 640 KB era todo lo que tenía que trabajar.

funciones

La mayoría de Win32 no son ciertas stdcall ya que también prescribe la forma de la función exportada está decorado antes presentado al enlazador. Al igual que Mumble vacío (int arg) se convierte en _Mumble @ 4. El número después del @ describe el tamaño de la trama de activación. Pero la mayoría de funciones de Win32 se exportan sin ningún tipo de decoración. Probablemente para dar al programador una oportunidad para hacer el trabajo GetProcAddress (). Creo que la decoración se pretende ayudar al enlazador detectar desajustes entre la firma de la función API declarada y la real. Tener una falta de coincidencia en el número de argumentos pasados ??es un kaboom automática ya que el destinatario de la llamada aparecerá más o menos argumentos de la pila y luego se pasaron. Es difícil de diagnosticar también. Una debilidad de stdcall, la convención cdecl no tiene este problema.

llamada interna es una mezcla entre stdcall, cdecl y thiscall. No se puede decir que haya detectado un patrón, aunque el código paso a paso-único de Windows no es algo que me gusta hacer.

Otros consejos

Código compilado con stdcall es significativamente más pequeño que el código compilado con cdecl (la alternativa). En el momento se tomó la decisión, el código más pequeño era un código más rápido.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top