您的位置 首页 制造

总线过错和段过错相关概念

在UNIX上编程时,经常会遇到如下两个常见的运行时错误:buserror(总线错误)segmentationfault(段错误)总线错误总线错误几乎都是由于未

在UNIX上编程时,经常会遇到如下两个常见的运行时过错:

buserror总线过错

segmentationfault段过错

总线过错

总线过错简直都是因为未对齐的读或写形成的。它之所以称为总线过错,是因为呈现未对齐的内存拜访恳求时,被阻塞的组件便是地址总线。对齐的意思便是数据项只能存储在地址是数据项巨细的整数倍的内存方位上。在现代的计算机架构中,尤其是RISC架构,都需求数据对齐,因为与恣意的对齐有关的额定逻辑会使整个内存体系更大且更慢。通过迫使每个内存拜访限制在一个cache行或一个独自的页面内,能够极大地简化如cache控制器或内存办理单元这样的硬件。

咱们表达“数据项不能跨过页面或cache鸿沟”规矩的办法多少有些直接,因为咱们用地址对齐这个术语来陈说这个问题,而不是开门见山说是制止内存跨页拜访,但它们说的是同一回事。例如,拜访一个8字节的double数据时,地址只允许是8的整数倍。所以一个double数据能够存储于地址24、8008、32768,但不能存储于地址1006,页和cache的巨细是通过精心设计的,这样只需恪守对齐规矩就能够确保一个原子数据项不会跨过一个页或cache块的鸿沟。

段过错

段过错通常是因为免除引证一个未初始化或不合法值的指针引起的。以产生频率为序,终究或许导致段过错的常见编程过错是:

1、坏指针过错:在指针赋值之前就用它来引证内存;或许向库函数传递一个坏指针(假如调试器显现体系程序中呈现了段过错,很或许并不是体系程序引起的段过错,问题或许就呈现在自己的代码中);或许指针被开释后还持续拜访它的内容。

2、改写过错:跳过数组鸿沟写入数据,在动态分配的内存空间以外写入数据,或改写一些堆办理数据结构(在动态分配的内存之前的区域写入数据就很容易产生这种状况)。

3、指针开释引起的过错:开释同一块内存两次,或开释一块未曾运用malloc分类的内存,或开释一个无效的指针。一个极为常见的与开释内存有关的过错便是在for(p=start;p;p=p->next)这样的循环中迭代一个链表,并在循环体内运用free(p)这样的句子。这样,鄙人一次循环迭代时,程序就会对现已开释的指针进行免除引证操作,然后导致不行意料的成果。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/bandaoti/zhizao/233257.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部