c – 为什么没有模板函数比模板函数更多二进制
作者:互联网
看到这个简单的程序
#include <cstdio>
#include <cstdlib>
void foo(){ printf("%d",1); }
int main(){ foo(); }
我用linux上的gcc 4.6.4 -std = c 0x -O2 -g -Wall编译它.
和二进制文件11`238字节.
但是这段代码产生了11个150字节:
#include <cstdio>
#include <cstdlib>
template< bool = false> void foo(){ printf("%d",1); }
int main(){ foo(); }
我也用clang 3.3测试,结果是5684字节和5636字节.
为什么没有模板版本功能会产生更多二进制代
解决方法:
这只是猜测,但是:
在第一个示例中,foo具有外部链接,而不是内联.如果另一个翻译单元使用它,编译器可能会生成非内联版本;并且链接器可能不会删除它,从而占用可执行文件中的空间.
在第二个示例中,foo是一个模板,因此链接器更有可能将其遗漏(因为当模板在多个转换单元中实例化时,它需要能够处理多个定义).
你必须检查二进制文件以确定发生了什么.如果您声明第一个静态或内联,也许您会看到不同.
标签:c,template-function 来源: https://codeday.me/bug/20190831/1775212.html