gcc的链接器能否将C标头中的静态函数的多个实例折叠到单个实例中?

问题描述 投票:0回答:1

我正在编写的嵌入式C代码在标头中定义了许多(即> 100个)小型静态访问器函数,但是将它们移出标头会很不舒服,因为会影响整体代码的清晰度。 :-(

gcc的链接器是否足够聪明,可以将标头定义的静态函数的多个实例折叠到最终二进制文件内的单个实例中?更一般而言,C标准是否为标头中定义的静态函数的多个相同实例定义链接器行为?谢谢!

准确地说:如果标头中定义的静态函数引用静态数据,那么我可以看到链接器将无法将多个实例折叠在一起,因为每个函数实例都将引用该静态数据的不同实例。但是,在标头中定义的静态函数不引用静态数据的情况下,编译后的实例化将基本相同(除非不可避免的编译器对它们进行静态命名,将其包裹起来)。这就是为什么我问gcc的链接器是否足够“智能”。 :-)

c gcc static linker header-files
1个回答
0
投票
[Gold和lld链接器执行相同的代码折叠(因此有些运气会合并所有本地定义),但是GNU ld不会,因此最好的方法是将static替换为inline(保证有重复的inline定义)待合并)。
© www.soinside.com 2019 - 2024. All rights reserved.