Mentalement, je me suis toujours demandé comment try/throw/catch regarde en coulisses, quand les compilations C++ le traduisent en assembleur. Mais puisque je ne l'utilise jamais, je n'ai jamais eu le temps de le vérifier (certaines personnes diraient paresseux).C++ try/throw/catch => code machine
La pile normale est-elle utilisée pour garder la trace de try
s, ou est-ce qu'une pile séparée par thread est conservée à cette seule fin? L'implémentation entre MSVC et g ++ est-elle grande ou petite? S'il vous plaît montrez-moi un pseudo asm (IA-32 est ok aussi) donc je ne dois jamais vérifier moi-même! :)
Modifier: Maintenant, je reçois les bases de l'implémentation de MSVC sur la gestion IA-32. Quelqu'un sait-il pour g ++ sur IA-32, ou tout autre processeur d'ailleurs?
Cela couvre la gestion des exceptions structurées Windows, qui est liée à la gestion des exceptions C++, mais pas la même chose.Pietrek mentionne dans l'introduction que les exceptions C++, telles qu'implémentées par Microsoft et Borland, utilisent SEH, mais que son article ne couvre pas * comment * elles l'implémentent. –
Grand article MSVC/IA-32, bien que long. –
Les exceptions C++ sont juste une classe d'exceptions SEH, avec un wrapper pour inclure les informations C++ (l'instance de classe d'exception). Les exceptions C++ doivent utiliser SEH pour propager les limites du noyau, etc. –