获取Clang中变量的大小

Mar*_*c-O 4 c c++ clang

使用Clang库,是否有一些可用的方法来获取变量的大小(就像我sizeof()在常规的C/C++程序中使用的那样?

我能够(这是我想要做的)发现VarDecl,但目前我仍然无法在Clang命名空间中找到任何方法来获取当前发现的var的大小VarDecl

Rob*_*Joy 6

类型的大小信息存储在与给定类型关联的TypeInfo中.您可以通过getTypeInfo函数从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';
}
Run Code Online (Sandbox Code Playgroud)

  • 在最新版本的Clang中,ASTContext :: getTypeInfo还返回[TypeInfo](http://clang.llvm.org/doxygen/structclang_1_1TypeInfo.html)(当前为3.6本身)。但是原理是一样的。 (2认同)