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 registri non volatili tramite un PUSH o modifica i file MSBuild .rsp tramite un'allocazione dello stack fissa aggiuntiva 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