加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 异常处理程序

发布时间:2020-12-16 06:02:43 所属栏目:百科 来源:网络整理
导读:有这样的代码: 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 text [] =“zim”(ASCII码) 现在有了try..catch的代码: char tex
有这样的代码:
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 text [] =“zim”(ASCII码)

现在有了try..catch的代码:

char text[] = "zim";
try{
  int x = 777;
}
catch(int){
}

堆栈:

09 03 00 00 **97 85 04 08** 7a 69 6d 00

现在在text和x之间放置新的4字节值.如果我添加另一个catch,那么会有以下的东西:

09 03 00 00 **97 85 04 08** **xx xx xx xx** 7a 69 6d 00

等等.我认为这是与异常处理相关联的一些值,并且在堆栈展开期间使用它来在try块中抛出异常时找到适当的catch.但是问题是,这个4字节值是什么(可能是一些地址去排除处理程序结构或某些id)?

我在32位Linux机器上使用了g 4.6.

解决方法

AFAICT,这是一个指向“展开表”的指针.根据 the Itanium ABI implementation suggestions,过程“[使用]展开表,找到有关如何处理在该PC发生的异常的信息,特别是获取该地址范围的个性例程的地址.

展开桌面的想法是很少使用堆栈展开所需的数据.因此,将指针放在堆栈上更有效率,并将数据的存储存储在另一个页面中.在最好的情况下,该页面可以保留在磁盘上,甚至不需要在RAM中加载.相比之下,C风格错误处理通常在L1缓存中终止,因为它全部是内联的.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读