根据维基百科页面“Segmentation fault”,总线错误可能是由于内存访问不对齐引起的。该文章举了一个触发总线错误的例子。在这个例子中,我们需要启用对齐检查以查看总线错误。如果我们禁用这种对齐检查,会发生什么呢?
程序似乎能正常工作。我有一个程序频繁地访问未对齐的内存,并被很多人使用,但没有人向我报告总线错误或其他奇怪的结果。如果我们禁用对齐检查,未对齐内存的副作用是什么?
平台: 我在x86/x86-64上工作。我还尝试使用“gcc -arch ppc”在Mac上编译我的程序,它能正常工作。
程序似乎能正常工作。我有一个程序频繁地访问未对齐的内存,并被很多人使用,但没有人向我报告总线错误或其他奇怪的结果。如果我们禁用对齐检查,未对齐内存的副作用是什么?
平台: 我在x86/x86-64上工作。我还尝试使用“gcc -arch ppc”在Mac上编译我的程序,它能正常工作。
alignof(T)
是未定义行为,即使在x86上也可能导致现实世界中的问题,例如当自动向量化编译器假定16字节对齐边界与一些short
之间的整数倍时,就会出现问题:为什么对mmap'ed内存的不对齐访问有时会在AMD64上导致段错误? - Peter Cordes