LLVM 中类型的大小

Size of types in LLVM

我们目前正在 Java 中构建一个编译器,它使用 LLVM 作为中间代码表示。我们使用了几种类型,我们需要为它们分配内存,例如使用 malloc。

我想知道如何计算元素在内存中所需的大小:指针、结构、...

我知道如果我们使用 LLVM API,我们可以使用 DataLayout,但不幸的是我们没有使用它,我们生成 LLVM 代码 "by hand"(主要是因为我们无法找到一个体面且易于使用的 Java 绑定)。

所以我们正在尝试确定如何计算(复杂)类型的大小,具体取决于编译器将在其上执行的体系结构。

现在,我们只是检查我们是否在 64 位架构上,以确定指针的大小(4 或 8 字节)。我们通过简单地添加它们的元素的大小来猜测结构的大小,但它似乎不正确(我猜应该考虑对齐)。

你能帮我想办法解决这个问题吗?

谢谢!

我完成此操作的一种方法是将指针指向您要调整大小的类型。然后使用 getelementpointer 获取指向元素 1 和元素 0 的指针。从指向元素 1 的指针中减去指向元素 0 的指针,这将是大小。当它被后端降低到填充尺寸时,它应该被常量折叠并优化为单个常量。