获取Clang中变量的大小

Get the size of a variable in Clang

本文关键字:变量 Clang 获取      更新时间:2023-10-16

使用Clang库,是否有一些可用的方法来获得变量的大小(如果我在常规C/c++程序中使用sizeof() ?

我能够(这就是我想做的)发现VarDecl,但目前我仍然找不到Clang命名空间中的任何方法来获得当前VarDecl

发现的var的大小

类型的大小信息存储在与给定类型相关联的TypeInfo中。你可以通过getypeinfo函数从ASTContext中获得一个对应的FieldInfo对。这对的第一个元素是以位为单位的类型的大小。第二个元素是以位为单位的类型的对齐方式。

bool VisitVarDecl(VarDecl *VD) {
    std::pair<uint64_t, unsigned> FieldInfo = VD->getASTContext().getTypeInfo(VD->getType());
    uint64_t TypeSize = FieldInfo.first;
    unsigned FieldAlign = FieldInfo.second;
    llvm::outs() << VD->getNameAsString() << " Size: " << TypeSize/8 << " Alignment: " << FieldAlign/8 << 'n';
}