我已经阅读了GCC的代码生成约定选项,但不了解“生成与位置无关的代码(PIC)”的含义。请举一个例子来解释我的意思。
3 回答
德玛西亚99
TA贡献1770条经验 获得超3个赞
我将尝试以一种更简单的方式来解释所讲的内容。
每当加载共享库时,加载程序(操作系统上的代码会加载您运行的任何程序)都会根据对象的加载位置更改代码中的某些地址。
在上面的示例中,非PIC代码中的“ 111”由加载程序在首次加载时写入。
对于非共享对象,您可能希望这样,因为编译器可以对该代码进行一些优化。
对于共享对象,如果另一个进程想要“链接”到该代码,则他必须将其读取到相同的虚拟地址,否则“ 111”将没有意义。但是该虚拟空间可能已在第二个过程中使用。
- 3 回答
- 0 关注
- 829 浏览
添加回答
举报
0/150
提交
取消