好的,請允許我重新提出問題,因爲沒有答案得到我真正感興趣的內容(道歉,如果像這樣的問題的全面編輯是一種人造主義)。用於確定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嗎?
謝謝,