我知道C Function alignment in GCC我可以使用]来对齐功能
__attribute__((optimize("align-functions=32")))
[现在,如果我希望函数以“奇数”地址开头,例如,我希望函数以
32(2k+1)
形式的地址开始,其中k
是任何整数,该怎么办?
我希望函数从地址(十进制)32或96或160开始,但不从0或64或128开始。
上下文:我正在做一个有关代码缓存的研究项目,我希望一个函数在一个缓存层中对齐,但在另一个缓存层中未对齐。
我从GCC中的C函数对齐知道,我可以使用__attribute __((optimize(“ align-functions = 32”)))对齐函数,如果我希望函数以“奇数”地址开头,该怎么办? ,I ...
GCC没有这样做的选项。
由于此问题被标记为装配体,因此,这是我的(NASM 8086)源代码中的两个位置,它们按照说明和数据“反对齐”。 (这里只是对齐偶数地址,即2字节对齐。)两者都是基于NASM的align宏进行的计算。
.align
我相信GCC仅允许您以2的幂次对齐
[如果要解决此问题以进行测试,则可以使用位置无关的代码(-FPIC或-FPIE)来编译函数,然后编写一个单独的加载程序,将该函数手动复制到MMAP读取/写。然后,您可以更改权限以使其可执行。当然,为了进行适当的性能比较,您将需要确保与之进行比较的对齐代码也已使用FPIC / FPIE进行了编译。