0
typedef struct {
char array[B];
int t;
short s[B];
int u;
} str2;
typedef struct {
short x[A][B];
int y;
} str1;
void setVal{str1* p, str2 *q) {
int v1 = q->t;
int v2 = q->u;
p->y = v1+v2;
}
movl 12(%ebp), %eax
movl 40(%eax), %edx
addl 12(%eax), %edx
movl 8(%ebp), %eax
movl %edx, 96(%eax)
我无法理解IA32代码。我理解第一个movl指令表示%eax = q,第四个movl指令表示%eax = p,但我不明白第二,第三和第五条指令的意思。我认为第二条指令意味着q + B(char 1byte)= q + 40。对吗?这段代码是做什么来确定数组的大小?
所以Array'array'和's'的大小是40? –
@FutureBillionaire'array'必须位于索引'0'(第一个成员的地址必须等于'struct'的地址)。接下来是't',然后''',然后'u',因为成员变量不能在'struct'中重新排序。由于't'在'struct'的'u'之前,它必须位于较低索引处,即'12'。 '你'在'40'。这意味着'sizeof(array)= 12 + padding'和'sizeof(s)= 40 - &s'。 (这只是伪代码,不会编译。) – Downvoter