Есть этот код:
char text[] = "zim";
int x = 777;
Если я посмотрю на стек, где размещены x и текст, то получится:
09 03 00 00 7a 69 6d 00
Где:
- 09 03 00 00 = 0x309 = 777 <- int x = 777 </li>
- 7a 69 6d 00 = символ текста [] = "zim" (код ASCII)
Теперь есть код с try..catch:
char text[] = "zim";
try{
int x = 777;
}
catch(int){
}
Stack:
09 03 00 00 **97 85 04 08** 7a 69 6d 00
Теперь между text и x помещается новое 4-байтовое значение. Если я добавлю еще один улов, то будет что-то вроде:
09 03 00 00 **97 85 04 08** **xx xx xx xx** 7a 69 6d 00
и так далее. Я думаю, что это какое-то значение, связанное с обработкой исключений, и оно используется во время разматывания стека, чтобы найти подходящий улов, когда исключение выдается в блоке try. Однако вопрос в том, что именно это 4-байтовое значение (может быть, какой-то адрес к структуре обработчика исключения или некоторый идентификатор)?
Я использую g ++ 4.6 на 32-битной машине Linux.