HALF_PTR Тип данных Windows - PullRequest
2 голосов
/ 27 июля 2010

В документации VS указано

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

Что именно это за тип и как он используется, если вообще когда-либо?

Ответы [ 3 ]

2 голосов
/ 27 июля 2010

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

Это означает, что в следующей структуре заполнение не требуется:

struct Example {
    void* pointer;
    HALF_PTR one;
    HALF_PTR two;
};

Конечно, это уместно только в том случае, если размер HALF_PTR (32 бита в 64-битной системе, 16 бит в 32-битной системе) достаточен для хранения предполагаемых значений.

2 голосов
/ 27 июля 2010

Я нашел эту статью на сайте Intel, и они предлагают использовать ее в контексте, где у вас есть класс с множеством членов-указателей, а также 32-битное смещение, чтобы получить реальный адрес, чтобы вырезать вниз на раздувание данных класса. В статье конкретно говорится о платформе Itanium, поскольку она использует 64-битные указатели вместо 32-битных, но я предполагаю, что проблема / решение проблемы будет одинаковым в любой системе, использующей 64-битные указатели.

Итак, короче говоря, можно предположить, что его можно использовать, если, например, вы хотите уменьшить объем памяти класса?

1 голос
/ 27 июля 2010

Примечание: анонимные структуры не являются стандартными, но MSVC принимает их:

union
{
    int * aPointer
    struct
    {
        HALF_PTR lowerBits;
        HALF_PTR upperBits;
    };
} myvar; //You can be assured this union is sizeof(int *)

Если вы думаете, что они не слишком полезны, вы были бы правы.

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