gpt4 book ai didi

c - 为什么我的共享库在编译为位置无关代码时要大得多?

转载 作者:行者123 更新时间:2023-11-30 21:06:58 25 4
gpt4 key购买 nike

我正在编写一个静态链接 SDL2 的共享库。因此,我使用 -fPIC 编译 SDL2 和我的共享库。 。我注意到没有使用 -fPIC最终共享库大小约为 940 KB,而 -fPIC最终共享库大小约为1.4兆字节。

为什么用 -fPIC 编译时共享库要大得多与没有 -fPIC 编译时相比?

测试是在 Raspberry Pi 2 上完成的,因此目标架构是 ARMv7A 或 ARMv8(A)。

最佳答案

简单地说:使代码与位置无关会产生开销。

在非位置无关代码中,编译器在访问全局数据时可以简单地发出对固定地址的引用。对于 PIC,通常涉及全局偏移表 (GOT);编译器必须先发出额外的代码才能访问 GOT。对其他函数的引用也是如此;使用 PIC,这些调用将通过过程查找表 (PLT)。

这种额外的间接级别会导致必要的大小增加。

关于c - 为什么我的共享库在编译为位置无关代码时要大得多?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46131459/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com