c++ - 为什么不总是使用 fpic(位置无关代码)?

标签 c++ gcc fpic

我读过 this在 PIC 上发帖,似乎使用 PIC 总是好的(只要它是 exe/static/share llibrary)。

那么有什么缺点呢?
是否有详细说明何时不使用 PIC 的示例?

最佳答案

链接问题中接受的答案非常简单,只提出了 PIC 和非 PIC 代码之间的不同之处,即生成相对而非绝对的跳转。

当您制作 PIC 代码时,不仅是 代码 与位置无关,它也是数据。并非所有代码或数据都可以简单地通过使用相对偏移量来解决,它必须在加载时(当库/程序加载到内存中时)甚至在运行时解决。

此外,使用相对寻址意味着 CPU 必须将相对偏移量转换为绝对地址,而不是由编译器完成。

在具有虚拟内存的系统上,当编译器可以一劳永逸地完成时,通常不需要在这些相对地址解析上花费加载或运行时间。

关于c++ - 为什么不总是使用 fpic(位置无关代码)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31332299/

相关文章:

c++ - Rcpp 将 vector 复制到 vector

c++ - Process 的封装会产生意想不到的行为

c - 如何让 GCC 在没有 "file was built for unsupported file format"的情况下正确编译目标文件?

gcc - 如果在可执行文件中使用,使用 gcc -fPIcflags编译对象(如果有的话)有什么含义?

c++ - c/c++ 将位置相关对象转换为位置无关对象

c++ - 从 C/C++ 在 Trac 中自动添加票证的最简单方法

c++ - 将 C++ 代码与 'gcc' 链接(无 g++)

c++ - 这段代码做了什么,为什么编译?

c++ - 使用 -fPIcflags重新编译

c++ - 没有重载函数的实例匹配参数列表 C++