Cla*_*hes 0 c++ algorithm alignment
好了,请允许我再次问这个问题,因为一切答案在什么我真正感兴趣的(道歉,如果像这样的问题的整体规模的编辑是一个人造PAUS)获得.
几点:
让我们创建一个名为pack的函数,它将一个整数(称为alignment)和一个整数元组(称为元素)作为输入.它输出另一个整数,称为大小.
该功能的工作原理如下:
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;
}
Run Code Online (Sandbox Code Playgroud)
我想我要问的是,但我不知道是否反转是正确的说法"这是什么函数的反函数?" - 我不记得曾经处理的多输入功能倒置,所以我可能只是使用不适用的术语.
像我想要的东西(有点像)存在; 这里我提供了一个我们称之为determine_align的函数的伪代码.但是,这个函数有点幼稚,因为它只是用不同的输入一遍又一遍地调用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;
}
Run Code Online (Sandbox Code Playgroud)
所以问题是,是否有更好的Determ_align实现?
谢谢,
C/C++中结构成员的对齐完全是实现定义的.那里有一些保证,但我不明白他们会如何帮助你.
因此,没有通用的方法来做你想要的.在特定实现的上下文中,您应该参考该实现的文档(如果已涵盖).
当选择如何将成员打包到struct实现中时,不必遵循您在算法中描述的那种方案,尽管它是常见的方案.(即对齐的最小尺寸类型和首选的机器对齐尺寸.)
但是,您不必比较a的总大小struct来确定已应用于单个struct成员的填充.标准宏offsetof将从struct任何单个struct成员的开头给出字节偏移量.