gpt4 book ai didi

c++ - "BUS_ADRALN - Invalid address alignment"错误是什么意思?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:55:49 24 4
gpt4 key购买 nike

我们在 HPUX 上,我的代码在 C++ 中。我们得到了

BUS_ADRALN - Invalid address alignment

在我们的函数调用中的可执行文件中。这个错误是什么意思?相同的功能运行了很多次,然后突然出现了核心转储。在 GDB 中,当我尝试打印它不在上下文中的对象值时。知道在哪里检查吗?

最佳答案

您遇到了数据对齐问题。这可能是由于尝试通过某种错误的指针读取或写入造成的。

数据对齐问题是指指针指向的地址未正确“对齐”。例如,某些体系结构(例如旧的 Cray 2)要求任何从内存中读取除单个字符以外的任何内容的尝试只能通过指针值的最后 3 位为 0 的指针发生。如果最后一个3 位为 1,硬件将产生对齐错误,这将导致您所看到的那种问题。

大多数架构并没有那么严格,而且所需的对齐方式通常取决于所访问的确切类型。例如,一个 32 位整数可能只需要指针的最后 2 位为 0,但 64 位 float 可能需要最后 3 位为 0。

对齐问题通常是由会导致 SEGFAULT 或段错误的同类问题引起的。通常是未初始化的指针。但这可能是由于错误的内存分配器没有返回具有正确对齐的指针,或者是指针的指针运算结果不是正确的类型引起的。

malloc 和/或 operator new 的系统实现几乎肯定是正确的,否则您的程序会比当前崩溃的方式早。所以我认为糟糕的内存分配器是最不可能出现的树。我会先检查未初始化的指针,然后再检查错误的指针算法。

附带说明一下,x86 和 x86_64 架构没有任何对齐要求。但是,由于缓存行的工作方式以及其他各种原因,将数据对齐到与存储的数据类型一样大的边界(即 32 位 int 的 4 字节边界)通常是提高性能的好主意。

关于c++ - "BUS_ADRALN - Invalid address alignment"错误是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3246441/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com