).

аписании сборки пространства пользователя x86 и сравнении двух значений указателя, мы должны использоватьподписанный такие условия, какjl а такжеjge или женеподписанный такие условия, какjb а такжеjae?

Интуитивно я считаю указатели как беззнаковые, работающие от 0 до 2 ^ 64-1 в случае 64-битного процесса, и я думаю, что эта модель точна для 32-битного кода. Я думаю, именно так большинство людей думают о них.

В 64-битном коде, однако, я не думаю, что вы когда-либо сможете действительно пересечь подписанный разрыв в0x7FFFFFFFFFFFFFFFи многие интересные области памяти имеют тенденцию к кластеризации около 0 со знаком (часто для кода и статических данных, а иногда и кучи в зависимости от реализации) и вблизи максимального адреса в нижней половине канонического адресного пространства (что-то вроде0x00007fffffffffff на большинстве систем сегодня) для стеков и кучи на некоторых реализациях1.

Поэтому я не уверен, каким образом они должны рассматриваться:подписанный имеет преимущество в том, что он безопасен около 0, так как там нет разрыва, инеподписанный имеет то же преимущество около 2 ^ 63, поскольку там нет разрыва. Однако на практике вы не видите адресов где-либо близко к 2 ^ 63, так как виртуальное адресное пространство текущего стандартного оборудования ограничено менее чем 50 битами. Это указывает на подписанный?

1 ... и иногда куча и другие сопоставленные области не находятся близко к нижней или верхней части адресного пространства.

Ответы на вопрос(1)

Ваш ответ на вопрос