c++ - 获取 Clang 中变量的大小

标签 c++ c clang

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

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

最佳答案

类型的大小信息存储在与给定类型关联的 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';
}

关于c++ - 获取 Clang 中变量的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25040536/

相关文章:

c++ - 在 C++ dll 中删除指针时出错

objective-c - 如何在 OSX 中以编程方式获取 GPU 温度?

c++ - Clang:覆盖之前在命令行中指定的所有警告和警告为错误的标志

c++ - 什么时候评估 lambda 函数中的表达式?

c++ - 不是所有的控制路径都返回一个值?警告

C——链表

c - 在一个简单的函数中处理 C 中可能出现的错误

c++ - 将 xvalue 转换为非常量左值引用时,为什么 gcc 和 clang 中的编译器错误不一致?

c++ - 有没有办法用 clang 有效地编译已经预处理的文件?

java - 为什么 fopen 由于 Android-NDK 应用程序的权限问题而在 native 方法中失败?