• cdecl passa i parametri sullo stack in ordine inverso; consente di creare funzioni che accettano un numero variabile di parametri (come printf, per esempio), ma la chiamata di una funzione cdecl genera più codice macchina rispetto ad una chiamata a funzioni con altre convenzioni di chiamata; questo perché cdecl specifica che dev'essere il chiamante a ripulire lo stack dai parametri, per cui per ogni chiamata ci deve essere il codice di passaggio dei parametri (una serie di push di parametri sullo stack), la chiamata vera e propria (call) e la pulitura dello stack (una serie di pop). È proprio il fatto che è il chiamante a ripulire lo stack a rendere possibile la chiamata con numero variabile di argomenti: infatti il codice chiamato non ha idea di quanti parametri in più ci siano e quanto spazio occupino sullo stack, per cui non ha informazioni su come pulire lo stack;
  • stdcall è la convenzione di chiamata più diffusa nelle dll e in generale nel codice che dev'essere chiamato da applicazioni esterne; i parametri sono passati sullo stack in ordine inverso, ma la responsabilità di ripulire lo stack spetta alla funzione chiamata. In questa maniera il codice di pulitura dello stack può essere messo in coda al codice della funzione invece di essere ripetuto al termine di ogni chiamata alla funzione, per cui, a parità di codice, un eseguibile in cui le funzioni sono stdcall risulterà tendenzialmente più piccolo di uno in cui le funzioni sono cdecl;
  • fastcall è una convenzione di chiamata non standardizzata e viene usata di solito solo all'interno delle applicazioni (non in codice richiamabile dall'esterno); i primi due parametri vengono passati, se possibile, nei registri ECX e EDC; gli altri vengono messi sullo stack in ordine inverso. Anche qui la responsabilità di pulire lo stack spetta alla funzione chiamata. Rispetto a stdcall e cdecl dovrebbe essere più veloce passare i primi due parametri e accedervici, perché si trovano nei registri invece che sullo stack.
  • thiscall è una convenzione di chiamata "speciale", che viene impiegata nei metodi delle classi che non usano un numero variabile di parametri; è analoga a stdcall, ma il puntatore a this (ossia all'oggetto su cui è stato invocato il metodo in questione) viene passato nel registro ECX. Nel caso di metodi con numero variabile di argomenti invece si ricorre a cdecl, piazzando this per ultimo sullo stack.

All'atto pratico io di solito uso fastcall come convenzione di chiamata predefinita (tramite l'opzione /Gr del compilatore) e stdcall per le funzioni richiamate dall'esterno (callback, funzioni esportate, ...); per forza di cose uso thiscall per i metodi delle classi. Se scrivessi funzioni con numero di argomenti variabile dovrei necessariamente usare per loro cdecl, ma il problema non si pone visto che non ricorro mai a questa funzionalità.