C非2次方的对准

C非2次方的对准,c,alignment,C,Alignment,在gcc中有一个名为.align的指令,它允许我在需要二次幂的边界上对齐对象。然而,在我的Intel Core Duo机器上,我想在不是二次幂的地址上对齐一些代码(而不是数据)。有什么简单的方法可以做到这一点吗 因为很明显,.align 3给了我一个错误:错误:对齐不是二的幂。假设您使用的是GCC,您可以使用压缩结构和手动填充: struct very_slow_t { int a; char padding; int b; /* b is now padded to byte

在gcc中有一个名为
.align
的指令,它允许我在需要二次幂的边界上对齐对象。然而,在我的Intel Core Duo机器上,我想在不是二次幂的地址上对齐一些代码(而不是数据)。有什么简单的方法可以做到这一点吗


因为很明显,
.align 3
给了我一个错误:错误:对齐不是二的幂。

假设您使用的是GCC,您可以使用压缩结构和手动填充:

struct very_slow_t
{
   int a;
   char padding;
   int b; /* b is now padded to byte 5 */
} __attribute__((__packed__));

但你为什么可能想这么做呢?我的意思是,这会使你的程序慢得多。

对齐到二的幂,然后在你想要对齐的代码之前填充适当数量的汇编程序NOP。(我假设您知道如何在gcc中进行内嵌汇编;如果不知道,请发表评论。)

您认为为什么要这样做?为什么可能要对齐到非2^n边界?英特尔是否在Core Duo中引入了三值电路?要运行一些内存测试,我需要正确的代码对齐;)谢谢,但更多的是寻找代码对齐,很抱歉没有特别提到这一点!是的,我知道怎么做。我知道这个选项,但是,如果我能“硬”对齐它会更容易!ThanksIt会更容易,是的,除了要求“align”命令取消对齐可能有点多!