2015-11-27 3 views
5

Есть ли интегральный тип, который имеет одинаковый размер и выравнивание в качестве указателя?Есть ли интегральный тип, который имеет одинаковый размер и выравнивание в качестве указателя?

Есть std::intptr_t и std::uintptr_t, но я считаю, что они не имеют того же выравнивания, что и указатель.

+2

Какая разница? Смещение указателя с интегральным типом - это неопределенное поведение. –

+0

@BenVoigt Я этого не делаю. Скорее, я вычисляю макеты структур данных во время выполнения, для реализации виртуальной машины, и проще, если целые числа имеют тот же макет, что и указатели. – rightfold

+0

Но если вы планируете компоновку структуры во время выполнения, выравнивание не должно быть проблемой: просто добавьте явные поля заполнения везде, где требуются требования к вытесненным выравниваниям, и вы должны быть в порядке. – rodrigo

ответ

4

Не требуется, чтобы все типы указателей имели одинаковый размер и выравнивание, что делает невозможным, чтобы для одного целочисленного типа был одинаковый размер и выравнивание по всем типам указателей.

Наверняка указатели на объекты, указатели на функции и указатель-член имеют разные требования. Но на некоторых платформах даже char* и int* имеют разный размер.

 Смежные вопросы

  • Нет связанных вопросов^_^