文章预览
大家好,我是LinuxZn。 最近踩了一个总线错误的坑,下面简单总结、复盘分享给大家。希望这些经验和教训,能让各位少走弯路。 什么是总线错误? 平时开发过程中,我们常遇到的、引起进程崩溃的错误,大多都是段错误吧。段错误(segmentation fault)就是指访问的内存超出了系统所给这个程序的内存空间,比如操作空指针、数组越界等。 与段错误比较相似,总线错误(Bus Error)就是因为对非对齐地址的访问导致CPU读取数据违反了一定的总线规则。 CPU处于性能方面的考虑,要求对数据进行访问时都必须是地址对齐的。如果发现进行的不是地址对齐的访问,就会发送SIGBUS信号给进程,使进程产生 core dump。 总线错误与CPU架构有关,有些架构的CPU支持不对齐访问。下面我们通过实例来进行分析: 总线错误的实例 # include # include # pragma pack(1) struc
………………………………