Ubuntu хранит переменные в неправильном порядке

Итак, у меня было это упражнение в моем классе, где я должен был сказать, какой из двух адресов больше, когда я создаю два символа в основной функции.

Поскольку локальные переменные хранятся в стеке, который начинается с высокого адреса и переходит на низкий адрес. Ответ был прост, что первый символ имеет больший адрес.

Но потом я написал небольшую тестовую программу:

#include "stdio.h"

int main(void)
{
    int a = 3;
    int b = 4;

    printf("Size a: %lu \n"
           "size b: %lu \n",
           sizeof(a),
           sizeof(b));

    printf("Address a: %p \n"
           "Address b: %p \n",
           (void *)&a,
           (void *)&b);

    return 0;
}

Выход:

Size a: 4 
size b: 4 
Address a: 0x7fffa1eb8a98 
Address b: 0x7fffa1eb8a9c 
[d4 ] Выход был введен в заблуждение, второй адрес char был больше. Я пробовал то же самое на компьютере в моем университете, и все было в порядке. Вы знаете, почему это так?

Я на Ubuntu 13.04 64bit.

1
задан 30 April 2013 в 17:04

1 ответ

Я не думаю, что понимаю, почему возникает проблема, но я думаю, что GCC может иметь какое-то отношение к этому ... Вот сравнение между GCC и Clang.

$ gcc -o test.gcc test.c
$ ./test.gcc
Size a: 4 
size b: 4 
Address a: 0x7fffeef71488 
Address b: 0x7fffeef7148c 


$ clang++ -o test.clang test.c 
$ ./test.clang 
Size a: 4 
size b: 4 
Address a: 0x7fff664573f8 
Address b: 0x7fff664573f4

Компилятор и его версия, которую вы используете в uni, может быть здесь переменной.

2
ответ дан 24 May 2018 в 22:52

Другие вопросы по тегам:

Похожие вопросы: