gpt4 book ai didi

C内核库包括和膨胀

转载 作者:太空宇宙 更新时间:2023-11-03 23:30:05 25 4
gpt4 key购买 nike

我是新手,所以在此先感谢您的帮助和耐心等待。我用 C 写了一个这样的程序:

main.c
arpsend.h - header w/include guard for arpsend.c functions
arpsend.c - includes <net/if.h>, <pthread.h>, etc.
arprec.h - header w/include guard for arprec.c functions
arprec.c - includes <net/if.h>, <pthread.h>, etc.

arpsend 和 arprec 文件使用了许多相同的内核库函数和定义。我注意到在编写 arprec.c 代码时我的程序大小猛增。它比我的代码应该有的膨胀得多。这使我得出结论,arpsend.c 和 arprec.c 都在各自的 .c 文件中链接了满足其自身需求所需的 linux 库代码。链接对于项目来说是多余的,但对于每个 .c 文件都是必需的。

我的问题如下:

  1. 如果我添加到项目中的每个 .c 文件都会因为内核和标准库冗余而像这样膨胀,那么每个程序不会变得不必要地膨胀吗?我的例子中的膨胀可能微不足道(~12k),但我只能想象如果我需要在几个不同的 .c 文件中使用一些图形库会发生什么样的膨胀。

  2. 有没有办法避免这种情况?

  3. 推荐的解决方案是将所有使用相同内核代码的函数简单地保存在一个文件中吗?

  4. 如果 #3 是正确的,那不是破坏了保持干净代码的意义吗?它是 C,所以它不是真正的 OOP,但我想将我的代码展开,以便我可以轻松地看到项目的构成。

如果这是多余的,我深表歉意。我在这里的论坛上筛选了几个小时。我找不到我的确切问题。再次感谢您的帮助

最佳答案

当您将 arprec.c 文件添加到项目中时,您认为您的二进制大小应该增加多少,而不是实际增加了多少?

无论项目中有多少文件使用它们,库函数只链接一次到最终的可执行文件中。链接器通常是智能的,只包含最终可执行文件中代码实际使用的库函数; arprec.c 是否可能使用 arpsend.c 不使用的库调用?

关于C内核库包括和膨胀,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17904429/

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