Arrays 如何在LLVM中保存指针数组?

Arrays 如何在LLVM中保存指针数组?,arrays,pointers,llvm,llvm-py,Arrays,Pointers,Llvm,Llvm Py,在某些背景下,我使用llvmpy库实现了一个编译器,它是LLVMIR生成的包装器 我创建了一个字符类型,它表示一个或多个UTF-8代码点。这些代码点存储在数组中,因此字符可以是以下数组之一: [1 x i32], [2 x i32], ..., [6 x i32] 现在,我想实现一个字符串类型。这将是指向数组的指针数组: [n x [1-6 x i32]*] where n is the string length 然而,(据我所知)LLVM似乎要求我声明内部数组的长度。因此,虽然我可以存储

在某些背景下,我使用llvmpy库实现了一个编译器,它是LLVMIR生成的包装器

我创建了一个字符类型,它表示一个或多个UTF-8代码点。这些代码点存储在数组中,因此字符可以是以下数组之一:

[1 x i32], [2 x i32], ..., [6 x i32]
现在,我想实现一个字符串类型。这将是指向数组的指针数组:

[n x [1-6 x i32]*] where n is the string length
然而,(据我所知)LLVM似乎要求我声明内部数组的长度。因此,虽然我可以存储这些:

[[1 x i32], [1 x i32], [1 x i32]]
[[1 x i32], [2 x i32]]
我无法存储以下内容:

[[1 x i32], [1 x i32], [1 x i32]]
[[1 x i32], [2 x i32]]
如果数组指针指向不同长度的数组,有没有一种方法可以存储数组指针的数组?

就像在C中一样,LLVM IR要求数组中的所有元素都是相同类型的

我想解决这个问题的最简单方法是只存储一些任意指针类型(例如,
i32*
),并在需要访问数组时执行
bitcast
——当然,这是假设您事先知道每个索引处的内部数组的大小


如果只在运行时知道,则可以使每个数组元素指向某个
{i32,i32*}
结构,该结构包含内部数组的大小以及指向该数组的指针,然后
切换该大小,并在每个分支目标中相应地进行
比特广播
,或者在运行时从
i32*
指针计算大小,这很容易,因为这是UTF-8。

谢谢-虽然我还没有让它完全工作,但我认为后一种运行时方法在这种情况下会很好地工作。