【发布时间】:2019-12-07 01:17:00
【问题描述】:
struct a
{
struct b
{
int i;
float j;
}x;
struct c
{
int k;
float l;
}y;
}z;
谁能解释一下如何找到int k 的偏移量,以便我们找到int i 的地址?
【问题讨论】:
-
布局如下 [ sizeof(int), sizeof(float), sizeof(int), sizeof(float) ]
-
你可以从
y的开头找到k的偏移量,或者从z的开头;您可以从x的开头或z的开头找到i的偏移量。但是,在给定i的偏移量的情况下,基本上没有保证找到k的偏移量的方法。您可以做出不可移植的假设来得出答案,但是当您可以提出不涉及假设的可移植方法时,为什么要这样做。 -
@koodawg 没必要。这取决于编译器和目标架构。有时编译器可能会添加填充以确保字段找到具有所需对齐的地址。 software.intel.com/en-us/blogs/2011/08/18/…