Почему в моей памяти 18 цифр адресов? D: - PullRequest
0 голосов
/ 08 января 2020

Я программировал по учебнику, и когда я был в учебнике указателей, я заметил, что вывод этого кода намного больше нормального (это ptr = 0x000000cd9d1cf504): / почему?

int main()
{

    int pointerTest = 6;
    void* ptr = 0; 
    ptr = &pointerTest;
    std::cout << ptr << std::endl;

    std::cin.get();
}

1 Ответ

1 голос
/ 08 января 2020

Это не 18-значный git адрес - он состоит только из 16 цифр. Префикс 0x просто указывает на то, что то, что следует после него, будет в шестнадцатеричной форме. Другая обычно используемая нотация для шестнадцатеричных целых чисел: h (или иногда x, например, в VHDL) либо с префиксом, либо с постфиксом (например, hCD9D1CF504, h'CD9D1CF504 или CD9D1CF504h) - обратите внимание, что это довольно неясно, если только шестнадцатеричные цифры AF являются заглавными).

Один шестнадцатеричный знак di git представляет 4 бита, поэтому указатель имеет размер 4 * 16 = 64 бита. Другими словами, исполняемый вашим компилятором двоичный исполняемый файл является 64-разрядным, в то время как двоичный файл учебного пособия, вероятно, был 32-разрядным, как указано @Hawky в комментариях.

Чтобы полностью понять разницу между 32- битный и 64-битный код, вам придется изучить архитектуру компьютера, в частности, x86-64. Тем не менее, будьте осторожны - если вы решите go по этому пути, подготовьтесь к жизни, наполненной болью и страданием (самое худшее, что вы можете просто наслаждаться этим).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...