LLVM-IR 数组指针分配
LLVM-IR array pointer assignment
在 C++/C 中,您可以执行以下操作:
unsigned char A[12];
unsigned int *B;
int *C;
B = malloc(sizeof(unsigned int));
C = malloc(2*sizeof(int));
A[0] = *B;
A[4] = *C;
//Then go on to access A byte by byte.
我想知道这在 LLVM-IR 中是否可行,或者它会立即抱怨类型问题。正要深入研究这个,但我想看看是否有人尝试过这个特定的例子。我会将 GEP A 的第 0 个位置作为 i8* ,然后 B 和 C 作为 i32* 吗?如果这可能的话,我对如何进行有点困惑。
提前谢谢。
更新:
好的,如果我改为为 *B 和 C[0]、C[1] 添加初始化,那么 LLVM-IR/C/C++ 的答案会改变吗?
LLVM具有bitcast
指令,通常用于将一种类型的指针转换为另一种类型的指针 - 例如,i32*
到i8*
。
如果您想访问 4 字节数字的第 3 个字节,执行以下操作是完全合法的:
%bytes = bitcast i32* %num to i8*
%third_byte = getelementptr i8* %bytes, i32 2
只要记住当你做这样的事情时,就会有恩迪亚。
是的,您可以使用此技术获取指向数组中特定位置的指针,并从那里store
和load
值,使您能够复制整个示例。
No.这在 C/C++ 中也是不可能的。不应将未初始化的变量分配给另一个变量。它调用未定义的行为。 *B
和*c
未初始化。
相关文章:
- 通过双指针分配指针
- 在不工作的情况下为数组分配指针,但反过来也可以
- 无法使用"std::make_shared"分配指针
- 分配指针时出现分段错误
- 为什么有时仅使用Ampersand运算符在C 中分配指针
- 重新分配指针阵列的一部分的安全方法
- 为什么在执行增量操作之前分配指针值
- 当指针指向的对象被另一个类的实例删除时,重新分配指针
- 在堆上分配指针的原因是什么?
- 有没有办法防止分配指针?
- 将运算符重写应用于具有动态分配指针的类
- 在堆上分配指针数组
- 在另一个结构中的结构内解除分配指针
- 分配指针后,是否可以为指针指向的事物分配变量名称?
- 重新分配指针后,将类功能与指针一起使用
- 为什么我的新分配指针会自动在程序退出上删除
- 分配指针的方法之间有什么区别?
- 如何声明和分配指针
- 内存分配(指针和堆栈)
- 通过参数分配指针的值