其他分享
首页 > 其他分享> > c – 为什么没有模板函数比模板函数更多二进制

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