好的,请允许我重新提出这个问题,因为没有一个答案是我真正感兴趣的(如果对这样的问题进行全面编辑是虚假的,我们深表歉意)。
几点:
- 这是使用与我正在测试的编译器不同的编译器进行的离线分析,因此 SIZEOF() 或类似的编译器不适用于我正在做的事情。
- 我知道它是实现定义的,但我碰巧知道我感兴趣的实现,如下所示。
让我们创建一个名为 pack 的函数,它将一个整数(称为对齐)和一个整数元组(称为元素)作为输入。它输出另一个整数,称为大小。
该功能的工作原理如下:
int pack (int alignment, int[] elements)
{
total_size = 0;
foreach( element in elements )
{
while( total_size % min(alignment, element) != 0 ) { ++total_size; }
total_size += element;
}
while( total_size % packing != 0 ) { ++total_size; }
return total_size;
}
我想我想问的是“这个函数的逆是什么?”,但我不确定逆是否是正确的术语——我不记得曾经处理过具有多个输入的函数的逆,所以我可能只是使用了一个不适用的术语。
我想要的东西(有点)存在;在这里,我提供了一个我们将称为确定对齐的函数的伪代码。不过,该函数有点幼稚,因为它只是用不同的输入一遍又一遍地调用 pack 直到它得到它期望的答案(或失败)。
int determine_align(int total_size, int[] elements)
{
for(packing = 1,2,4,...,64) // expected answers.
{
size_at_cur_packing = pack(packing, elements);
if(actual_size == size_at_cur_packing)
{
return packing;
}
}
return unknown;
}
所以问题是,确定对齐有更好的实现吗?
谢谢,