(SPARC) 指定未对齐数据访问的最大假定内存对齐和行为。
对于可在编译时确定对齐的内存访问,编译器会为数据对齐生成相应的装入/存储指令序列。
对于不能在编译时确定对齐的内存访问,编译器必须假定一个对齐以生成所需的装入/存储序列。
使用 -xmemalign 标志,用户可以指定因上述未确定情况编译器要假定的数据最大内存对齐。它还指定了在运行时发生未对齐内存访问时的错误行为。
指定的值包含两个部分: 数值对齐值 <a>,以及字母行为标志 <b>。
对齐 <a> 的允许值有:
假定最多 1 字节对齐。
假定最多 2 字节对齐。
假定最多 4 字节对齐。
假定最多 8 字节对齐。
假定最多 16 字节对齐。
访问未对齐数据时错误行为 <b> 的允许值有:
解释访问并继续执行。
产生信号 SIGBUS。
在 64 位平台上,产生信号 SIGBUS 仅对齐少于或等于 4,否则将解释访问并继续执行。在其他平台上,f 与 i 等效。
如果在不指定 -xmemalign 的情况下进行编译,缺省值为:
针对 32 位平台的 8i
针对采用 C 和 C++ 的 64 位平台的 8s
针对采用 Fortran 的 64 位平台的 8f
对于所有平台,-xmemalign 不带值显示时的缺省值为 1i。
请注意,-xmemalign 本身并不强制进行任何特殊的数据对齐。使用 -dalign 或 -aligncommon 可强制进行数据对齐。
此外,只要链接到使用 b 值 i 或 f 编译的目标文件,就必须指定 -xmemalign。
-dalign 选项是一个宏:
-dalign 是 -xmemalign=8s -aligncommon=16 的宏
不要将 -aligncommon=1 与 -xmemalign 一起使用,因为这些声明会发生冲突,在某些平台和配置上可能会引发段故障。
有关详细信息,请参见3.4.2 –aligncommon[={ 1|2|4|8| 16}]。