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