Смещения памяти в команде mov - PullRequest
0 голосов
/ 04 августа 2020

При использовании Compiler Explorer я заметил, что char всегда смещается на 1 от предыдущей позиции. Например:

int main() {
    char a = 1;
    char b = 2;
    char c = 3;
    char d = 4;
    char e = 5;
    return a + b + c + d + e;
}
main:
        ...
        movb    $1, -1(%rbp)
        movb    $2, -2(%rbp)
        movb    $3, -3(%rbp)
        movb    $4, -4(%rbp)
        movb    $5, -5(%rbp)

Однако в следующем примере для short, почему он смещен на 4, а не на 2?

int main() {
    char b = 2;
    short c = 2;
    return b;
}
main:
        ...
        movb    $2, -1(%rbp)
        movw    $2, -4(%rbp) <-- why isn't this offset by 2?

I подумайте над ответом, потому что, поскольку это два байта, он должен соответствовать адресам памяти 3 и 4, поэтому, если бы он был на 2, у него не было бы достаточно места с уже занятым 1, но я не слишком уверен. Каковы «правила» того, как байты заполняются / по какому смещению они добавляются?

...