Этот вопрос очень похож на этот, но я не совсем уверен, как получить размер в следующей ситуации:
У меня есть тип указателя, например. i32*
.
Теперь я хотел бы получить размер типа «указанный на», поэтому i32
(он же 4).
Прямо сейчас я использую следующий код, который, кажется, работает, но я не уверен, что он действительно правильный:
Value *get_size(Type *t, IRBuilder<>& irb)
{
Value *sizePtr = irb.CreateGEP(t->getContainedType(0),
irb.CreateIntToPtr(ConstantInt::get(irb.getInt8Ty(), 0), t),
ConstantInt::get(irb.getInt8Ty(), 1));
return irb.CreatePtrToInt(sizePtr, irb.getInt64Ty());
}
(примечание: тип t
, который передается функции, всегда будет типом указателя)