将C函数对准“奇数”地址

问题描述 投票:2回答:3

我知道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 caching assembly memory-alignment microbenchmark
3个回答
3
投票

GCC没有这样做的选项。


1
投票

由于此问题被标记为装配体,因此,这是我的(NASM 8086)源代码中的两个位置,它们按照说明和数据“反对齐”。 (这里只是对齐偶数地址,即2字节对齐。)两者都是基于NASM的align宏进行的计算。

.align


0
投票

我相信GCC仅允许您以2的幂次对齐

[如果要解决此问题以进行测试,则可以使用位置无关的代码(-FPIC或-FPIE)来编译函数,然后编写一个单独的加载程序,将该函数手动复制到MMAP读取/写。然后,您可以更改权限以使其可执行。当然,为了进行适当的性能比较,您将需要确保与之进行比较的对齐代码也已使用FPIC / FPIE进行了编译。

© www.soinside.com 2019 - 2024. All rights reserved.