Где метаданные указателя хранятся?

Мог быть то, что я пропускаю что-то очевидное, но где метаданные указателя хранятся? Например, если у меня есть 32-разрядный международный указатель ptr и я выполняюсь ptr++ это знает для усовершенствования на 4 байта в памяти. Однако, если у меня есть 64-разрядный международный указатель, он знает для усовершенствования на 8 байтов. Таким образом, кто отслеживает какой указатель ptr и где это хранится? Для простоты можно ограничить это C++.

8
задан dmckee 3 February 2010 в 06:12
поделиться

3 ответа

По сути, он нигде не хранится. Компилятор проверяет тип ptr и превращает операцию ++ в приращение правильного количества байтов.

18
ответ дан 5 December 2019 в 05:56
поделиться

Он нигде не хранится, он определяется во время компиляции. На самом деле, возьмем этот код в качестве примера:

int *abc = NULL;
cout << abc + 1; /* Prints sizeof(int) */
cout << (void *)((char *)abc + 1); /* Prints 1. Casting it back to void * is necessary,
           otherwise it will try to dereference it and print as a string. */
2
ответ дан 5 December 2019 в 05:56
поделиться

В таблице символов во время работы компилятора. Нигде в то время как ваша программа не запущена, точнее, она неявно присутствует в коде нижнего уровня, выдаваемом компилятором.

8
ответ дан 5 December 2019 в 05:56
поделиться
Другие вопросы по тегам:

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