小编NoI*_*Guy的帖子

程序编译中的PIC级别是多少?

我正在查看LLVM库,我发现Clang发出了添加此元数据的LLVM IR模块:

!llvm.module.flags = !{!0}
!llvm.ident = !{!1}

!0 = !{i32 1, !"PIC Level", i32 2}
!1 = !{!"Apple LLVM version 7.3.0 (clang-703.0.31)"}
Run Code Online (Sandbox Code Playgroud)

然后我发现setPICLevel()在模块上调用方法会得到类似的结果:

!0 = !{i32 1, !"PIC Level", i32 0}
Run Code Online (Sandbox Code Playgroud)

所以整个元数据!0都是关于PIC级别的.

我一直在互联网上搜索它,但我一无所获.什么是PIC级别,它表示什么?

c++ llvm clang llvm-ir

5
推荐指数
1
解决办法
693
查看次数

帧指针的优点是什么?

我们正在学习 MIPS 汇编器(我想这个问题可以适用于一般的汇编),老师向我们介绍了frame pointer

如果我有一个函数序言,我曾经直接做堆栈指针

addiu $sp, $sp, -8   ; alloc 2 words in the stack
sw $s0, 4($sp)       ; save caller function $s0 value in the stack
sw $ra, ($sp)        ; save the return address for the callee function
Run Code Online (Sandbox Code Playgroud)

在函数结语中:

move $v0, $0         ; set 0 as return value
lw $s0, 4($sp)       ; pick up caller $s0 value from the stack
lw $ra, ($sp)        ; pick up return address to return to the caller
addiu …
Run Code Online (Sandbox Code Playgroud)

assembly mips

5
推荐指数
1
解决办法
1599
查看次数

使用C++ std :: enable_if和普通函数?

假设我有一个枚举:

typedef enum {
  Val1,
  Val2,
  Val3,
  Val4
} vals;
Run Code Online (Sandbox Code Playgroud)

并且函数check(vals x)返回一个布尔值,指示val是否在特定的值子集中vals.

bool check(vals x) {
  switch(x) {
  case Val1:
  case Val3:
    return true;
  }
  return false;
}
Run Code Online (Sandbox Code Playgroud)

我想使用这个函数作为enable_if(函数,你可以看到,它不是一个函数,取决于运行时)的条件,让用户只使用这些值与类模板.

class MyClass<vals v> {

}
Run Code Online (Sandbox Code Playgroud)

PS:我需要模板来为类的方法进行特化,具体取决于模板值.

c++ templates

4
推荐指数
1
解决办法
135
查看次数

标签 统计

c++ ×2

assembly ×1

clang ×1

llvm ×1

llvm-ir ×1

mips ×1

templates ×1