какой тип для работы с / сравнения адресов памяти - PullRequest
1 голос
/ 09 апреля 2011

Если я специально работаю с адресами памяти, например, когда пишу отладчик (в отличие от работы с указателями на строки, числа с плавающей точкой и т. Д., Потому что это полезно), какой тип я должен использовать? Идеально с учетом 32/64 битовых соображений.

Некоторые из типов adhoc, которые я использовал до сих пор, в том же коде для той же цели, включают int64_t, NSUInteger, char *, void *, intptr_t.

по сути, мне нужно будет сравнить и отсортировать по адресу. Спасибо

Ответы [ 3 ]

3 голосов
/ 09 апреля 2011

Если вам нужно только сравнить адреса, используйте void *. Для этого потребуется любой тип, и оператор справки (&) распечатает правильную ячейку памяти. Кроме того, он будет переносимым между 32 и 64-битными типами, а также случайными структурами и т. Д. И т. Д. И т. Д. Можно сравнивать с обычным сравнением «меньше», кроме использования адреса указателя (&), а не значение самого указателя.

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

Надеюсь, это поможет.

0 голосов
/ 09 апреля 2011

Еще один тип, который может пригодиться: ptrdiff_t. Просто будь осторожен .

0 голосов
/ 09 апреля 2011

Я думаю, что это бросок между uintptr_t (от <stdint.h>) и void *. Оба будут одинаково хорошо работать как для 32-битных, так и для 64-битных сред. Я бы, вероятно, использовал uintptr_t, но вы не ошибетесь и с void *.

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