Существует ли целочисленный тип, который имеет тот же размер и выравнивание, что и указатель?

Существует ли целочисленный тип, который имеет тот же размер и выравнивание, что и указатель?

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


person rightfold    schedule 27.11.2015    source источник
comment
Что это меняет? Псевдоним указателя с целочисленным типом в любом случае является неопределенным поведением.   -  person Ben Voigt    schedule 27.11.2015
comment
@BenVoigt Я этого не делаю. Скорее, я вычисляю макеты структур данных во время выполнения для реализации виртуальной машины, и проще, если целые числа имеют тот же макет, что и указатели.   -  person rightfold    schedule 27.11.2015
comment
Но если вы делаете макет структуры во время выполнения, выравнивание не должно быть проблемой: просто добавьте явные поля заполнения везде, где важны предполагаемые требования выравнивания, и все будет в порядке.   -  person rodrigo    schedule 27.11.2015
comment
Возможно, вы захотите использовать файл union. Хотя это редко бывает полезно, виртуальные машины — один из тех случаев, когда они могут иметь смысл.   -  person MSalters    schedule 28.11.2015


Ответы (1)


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

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

person Ben Voigt    schedule 27.11.2015