如果已知结构构件的对齐,是否可以找到结构类型的对齐?
例如.对于:
struct S
{
a_t a;
b_t b;
c_t c[];
};
Run Code Online (Sandbox Code Playgroud)
是S = max(alignment_of(a),alignment_of(b),alignment_of(c))的对齐?
在网上搜索我发现"对于结构化类型,其任何元素的最大对齐要求决定了结构的对齐"(在每个程序员应该知道的内存中)但我在标准中找不到任何类似的东西(最新草稿更准确).
编辑: 非常感谢所有的答案,特别是罗伯特·甘博为原始问题提供了一个非常好的答案,以及其他贡献者.
简而言之:
为了确保结构构件的对准要求,结构的对准必须至少与其最严格构件的对准一样严格.
至于确定结构的对齐方式,我们提出了一些选项,经过一些研究,我发现了这个:
如果我们想要使用"标准"解决方案,我们只限于std :: tr1 :: alignment_of,但如果你将c ++代码与c99的灵活数组混合,这将不起作用.
我认为它只有一个解决方案 - 使用旧的struct hack:
struct S
{
a_t a; …Run Code Online (Sandbox Code Playgroud) 在C中,最好的方法是查看一个数字是否可以被另一个数除尽?我用这个:
if (!(a % x)) {
// this will be executed if a is divisible by x
}
Run Code Online (Sandbox Code Playgroud)
反正哪个更快?我知道这样做,即130%13将导致每10次做130/13.因此,只需要一个循环就有10个循环(我只想知道130是否可以被13整除).
谢谢!