好的,请允许我重新提出问题,因为没有答案得到我真正感兴趣的内容(道歉,如果像这样的问题的全面编辑是一种人造主义)。用于确定C/C++结构中元素对齐的算法
的几点:
- 这是一个不同的编译器一个比我测试的离线分析,所以SIZEOF()或类似的将不是我在做什么工作。
- 我知道它是实现定义的,但我碰巧知道下面我感兴趣的实现。
让我们做一个叫包功能,这需要作为输入一个整数,称为校准和整数的元组,称为元素。它输出另一个整数,称为大小。
功能的工作原理如下:
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;
}
我想我要问的是“这是什么函数的反函数?”,但我不知道是否反转是正确的term--我不记得曾经用多输入来处理函数的反转,所以我可能只是使用一个不适用的术语。
像我想要的东西(排序)存在;这里我提供了一个函数的伪代码,我们将其称为determine_align。这个函数有点幼稚,因为它只是一次又一次地用不同的输入来调用打包,直到它得到它期望的(或失败的)答案。
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;
}
所以问题是,有更好的执行判定_align吗?
谢谢,