Strutture UNWIND_INFO concatenate

Se il flag UNW_FLAG_CHAININFO è impostato, una struttura UNWIND_INFO è una struttura secondaria e il campo indirizzo condiviso del gestore eccezioni o della struttura UNWIND_INFO concatenata contiene le informazioni di rimozione primarie.Il codice seguente recupera le informazioni UNWIND principali, presupponendo che unwindInfo sia la struttura con il flag UNW_FLAG_CHAININFO impostato.

PRUNTIME_FUNCTION primaryUwindInfo = (PRUNTIME_FUNCTION)&(unwindInfo->UnwindCode[( unwindInfo->CountOfCodes + 1 ) & ~1]);

La struttura UNWIND_INFO concatenata risulta utile in due situazioni.Innanzitutto può essere utilizzata per i segmenti di codice non contigui.L'utilizzo di questa struttura consente di ridurre la dimensione delle voci UNWIND_INFO richieste, poiché non è necessario duplicare la matrice dei codici di rimozione dalla struttura UNWIND_INFO principale.

È possibile utilizzare anche informazioni concatenate per raggruppare i salvataggi dei registri volatili.Il compilatore può ritardare il salvataggio di alcuni registri volatili finché non esce dal prologo della voce di funzione.È possibile registrare la voce UNWIND_INFO principale relativa alla parte della funzione prima del codice raggruppato e quindi impostare la struttura UNWIND_INFO concatenata con una dimensione del prologo diversa da zero, dove i codici di rimozione in tale struttura riflettono le operazioni di salvataggio dei registri non volatili.In tal caso, tutti i codici di rimozione sono istanze di UWOP_SAVE_NONVOL.Un raggruppamento che salva i registri non volatili utilizzando una SPINTA o modificare il registro di RSP utilizzo di allocazione dello stack imposta aggiuntive non è supportato.

Un elemento UNWIND_INFO che dispone di un set UNW_FLAG_CHAININFO può contenere una voce RUNTIME_FUNCTION il cui elemento UNW_FLAG_CHAININFO dispone anche di un set UNWIND_INFO (shrink-wrapping multiplo).I puntatori UNWIND_INFO concatenati arriveranno infine a un elemento UNWIND_INFO in cui il flag UNW_FLAG_CHAININFO non è impostato. Si tratta dell'elemento UNWIND_INFO principale che punta al punto di ingresso effettivo della routine.

Vedere anche

Riferimenti

Dati di rimozione per la gestione delle eccezioni, supporto del debugger