Как мне представить указатель на начало моего адресного пространства?

Давайте рассмотрим некоторую странную гипотетическую встроенную систему, в которой мне нужно создать и использовать указатель, который указывает или может указывать на первый байт моего адресного пространства. То есть указатель равен нулю. Не NULL-указатель, а совершенно допустимый нулевой указатель, который может быть разыменован, увеличен или обработан как массив, как любой другой указатель. Как бы я сделал это в языках, которые обрабатывают указатель NULL как особый, но не имеют реального типа NULL?

0

Решение

Весь «указатель NULL, имеющий специальное значение, отличное от 0, обработанного особым образом», возможен на некоторых редких старых машинах, но на практике ваш указатель NULL / 0, указывающий на адрес 0, будет иметь значение 0 и действительно будет указывать на адрес 0 на большинстве машин ,

Это будет совершенно разыменовано, и вы можете писать по этому адресу, если в этой области есть какая-то память.

Я имел обыкновение иметь это на встроенной платформе, с которой я работал. Поэтому я использовал точку наблюдения отладчика по адресу 0, поскольку все обращения к этой области были разыменованными указателями NULL. Поймал некоторые ошибки таким образом ^^

5

Другие решения

В большинстве архитектур вообще нет ничего особенного в указателе NULL, это просто обычный указатель с адресом 0. Если вы работаете со встроенной системой, в которой есть реальная память, она должна работать правильно. Единственная проблема возникает, если вы пытаетесь проверить указатель на нулевое значение, так что не делайте этого.

3

Если это помогает, определения регистра (указатель на конкретный адрес) записываются (в моей копии CodeWarrior) как:

#define REGISTER_XYZ      (*(vuint32 *)(0x40100000))

Обратите внимание vuint, поскольку это нестабильное местоположение (может измениться вне нашего контроля), которое может иметь или не иметь отношение к вам.

И замените 0x40100000 на выбранный вами адрес, естественно.

0
По вопросам рекламы [email protected]