gpt4 book ai didi

SPARC 体系结构中的 C++ 总线错误

转载 作者:太空宇宙 更新时间:2023-11-04 14:46:32 26 4
gpt4 key购买 nike

我想了解为什么使用此代码会出现总线错误。

int main()
{
int p=34;
int *pp= (int *) ((char *)&p+1);
cout<<*pp<<"\n";
return 0;
}

最佳答案

这无疑是一个对齐问题。在许多架构中,某些类型必须正确对齐,例如 4 字节整数必须从 4 字节边界开始。

如果您访问未对齐的数据,一些架构不会在意,另一些会运行得更慢,还有一些(例如在本例中)会陷入尖叫的堆中。

当您创建整数p时,它将在堆栈中正确对齐在一个地址上,该地址是正确的倍数。

通过按字节向上移动该地址,并将其取消引用为 int,您将导致 SIGBUS

This link在 Oracle 显示对齐要求。简而言之:

  • 短整数在 16 位边界上对齐。
  • int 整数在 32 位边界上对齐。
  • 对于 SPARC 系统,长整数在 64 位边界上对齐。
  • long long 整数在 64 位边界上对齐。

关于SPARC 体系结构中的 C++ 总线错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1892566/

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