在Linux中的通用x86用户应用程序中,什么会导致SIGBUS (总线错误)?我在网上找到的所有讨论都是关于内存对齐错误的,据我所知,这并不真正适用于x86。
(我的代码在Geode上运行,以防那里有任何相关的特定于处理器的怪癖。)
发布于 2010-01-19 05:10:07
如果打开未对齐访问陷阱,则可以从未对齐访问获得SIGBUS,但在x86上通常是关闭的。如果出现某种错误,您也可以通过访问内存映射设备来获取它。
最好的办法是使用调试器来识别出错指令(SIGBUS是同步的),并尝试查看它试图做什么。
发布于 2010-01-19 08:10:05
在Linux中,除了内存对齐错误之外,还有很多其他原因会发生SIGBUS -例如,如果您试图访问超出映射文件末尾的mmap区域。
您是否在使用mmap、共享内存区域或类似的东西?
发布于 2010-01-20 02:32:12
哦,是的,还有一种更奇怪的方法来获取SIGBUS。
如果内核由于内存压力(必须禁用OOM杀手)或IO请求失败而无法在代码页中分页,则SIGBUS。
https://stackoverflow.com/questions/2089167
复制相似问题