LLVM:在编译时将所有类型的值存储在i8数组中



标题的一个例子是在数组中的整数旁边存储一个符号(例如函数指针(。这将允许链接器将符号的正确地址(我们在优化时不知道(放置在i8数组中。

如何在[<Sum of sizes> x i8]数组中存储任何LLVM值,无论其类型是什么(只要其大小(?将任何类型的值存储在[N x i8]数组中,这将在LLVM过程中进行。我知道,每次使用指针强制转换和加载时都需要更改这些值;这不是问题。

谢谢。

我不太明白你想用i8数组做什么,但我认为这是你问题的核心:

如何存储任何LLVM值,无论其类型是什么(只要它的大小(,在[x i8]阵列内

若要将LLVM值重新解释为具有不同类型的值,请使用位转换。您可以获得一个指向数据的指针,然后将其位转换为i8*,然后使用llvm.memcpy将其写入数组。要获取类型的运行时大小,请参阅以下答案。

或者,您可以将所有对象放在一个巨大的结构中,然后将其位转换到需要的i8数组中。这可能更可取,因为它可以更自然地编译到没有运行时开销的东西。

最新更新