我有一个数组和一个 vector ,它们都保存着相同的数据,比如 0、1、2、3、4。
然后我使用 GEP 来获取数组的 ptr,

%0 = getelementptr [5 x i32]* %arr, i32 0, i32 3
%1 = load i32* %0

因此,%0 是 %arr 指向的数组中第 4 个元素的指针,%1 的值为 3。

但是现在,我将指向 vector 的指针位转换为指向 i32 的指针:
%2 = bitcast <5 x i32>* %Vec to i32*

和:
%3 = getelementptr i32* %2, i32 3
%4 = load i32* %3

我不知道数组和 vector 之间的内存布局是否有任何差异。
如果没有区别,我认为从 vector 中获取元素的方法是可以的。
那么,我这样做是否正确?

最佳答案

您可以使用 bitcast 后跟 gep 来获取 vector 中的第 4 项,但它是多余的 - 您可以单独使用 gep,其方式与使用数组完全相同。

使用 gep 时,您无需了解有关内存布局的任何信息。在任何情况下, vector 的内存总是按顺序排列的,这可以从 bitcast 在 vector 和整数之间的行为中推断出来;并且由于您不能使用 bitcast 数组,因此它们的内存布局并不重要。

关于c++ - LLVM 内存布局中的 vector 和数组有什么区别?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19486926/

10-11 21:53