Мог быть то, что я пропускаю что-то очевидное, но где метаданные указателя хранятся? Например, если у меня есть 32-разрядный международный указатель ptr
и я выполняюсь ptr++
это знает для усовершенствования на 4 байта в памяти. Однако, если у меня есть 64-разрядный международный указатель, он знает для усовершенствования на 8 байтов. Таким образом, кто отслеживает какой указатель ptr
и где это хранится? Для простоты можно ограничить это C++.
По сути, он нигде не хранится. Компилятор проверяет тип ptr и превращает операцию ++ в приращение правильного количества байтов.
Он нигде не хранится, он определяется во время компиляции. На самом деле, возьмем этот код в качестве примера:
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. */
В таблице символов во время работы компилятора. Нигде в то время как ваша программа не запущена, точнее, она неявно присутствует в коде нижнего уровня, выдаваемом компилятором.