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