【发布时间】:2014-12-12 16:25:45
【问题描述】:
我改造最简单的C代码
#include <stdio.h>
int main()
{
return 0;
}
到它的 LLVM IR,使用
clang -emit-llvm -S hello.c
生成的 IR 是:
define i32 @main() #0 {
%1 = alloca i32, align 4
store i32 0, i32* %1
ret i32 0
}
但是,我不明白这个 IR。 (LLVM 文档对初学者有帮助,但对初学者没有多大帮助)
- 为什么我们有
%1 = alloca i32, align 4?它对应于原始代码中的什么? -
store i32 0, i32* %1的同样问题 - alloca 是指堆栈上的分配(而不是动态分配)吗?
- “对齐 4”是什么意思?
【问题讨论】:
-
align表示内存操作要对齐到4个字节。我不确定其余的。