1

这个问题听起来很愚蠢。当然,只需键入:

  int i = 1;
  int &k = i;

但是在我用 llvm 编译它(优化标志是-O0)之后,我有下一个中间解释:

  %i = alloca i32, align 4                        ; <i32*> [#uses=2]
  %k = alloca i32*, align 8                       ; <i32**> [#uses=2]

这意味着i并且k不是别名(据我所知 %k 包含 %i 的地址)。如何制作别名示例?

4

1 回答 1

4

如果两个指针指向相同的内存位置,则它们是别名。别名的概念只适用于指针——因为非指针值不能指向任何地方。所以在你的例子i中永远不能给任何东西起别名。

如果您想要一个别名示例,请查看以下代码段:

int i = 1;
int &j = i;
int &k = i;

j并且k有别名。

我不确定您期望在 LLVM 方面看到什么,尤其是在-O0. 如果您期望一个全局别名,那么它们是不相关的,用于为现有全局提供第二个名称。

于 2013-06-02T06:33:23.503 回答