Понимание указателей и управление памятью - PullRequest
0 голосов
/ 12 октября 2019

Я пытаюсь понять указатели в C ++.

Там у нас есть небольшой пример кода:

int main(void) {
    int var = 8;
    void* pointer = &var; // 0x00A0FB64
}

И есть изображение памяти: введите описание изображенияздесь

0x00A0FB64  08 00 00 00 cc cc cc cc ca c8 a0 1d 84 fb a0 00 ee 2b bf 00 01 00 00 00 20 53 12 01 00 5a 12 01 dc fb a0 00 50 2a bf 00

В шестнадцатеричной системе счисления 08 00 00 00, и когда мы преобразуем ее в двоичную систему счисления:

Мы получим 1000 00000000 00000000 00000000.

Размер целого числа должен быть 32 бита, но есть только 28 бит.

Как это возможно?

И правильно ли я понимаю таблицу памятицелое число равно (?) :

0x00A0FB64 -> 08
0x00A0FB65 -> 00
0x00A0FB66 -> 00
0x00A0FB67 -> 00

Спасибо за любую помощь!

1 Ответ

1 голос
/ 13 октября 2019

08 - это 1000 в двоичном формате. Однако, 00001000.

. Таким образом, память фактически становится: 00001000 00000000 00000000 00000000, что составляет 32 бита.


Боковая проблема, технически не гарантируетсяразмеры в C ++ , только то, что int составляет не менее 16 бит (среди прочих гарантий для других типов).

Таким образом, теоретически, это может быть 28 бит, пока все другие требования дляразмеры шрифта выполнены. Просто на практике у вас, вероятно, не будет 28 бит, а скорее всего 32.

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