gpt4 book ai didi

c++ - 为什么没有模板函数比模板函数更二进制

转载 作者:太空狗 更新时间:2023-10-29 20:42:08 26 4
gpt4 key购买 nike

看看这个简单的程序

#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 是一个模板,因此链接器更有可能将其省略(因为在实例化模板时需要能够处理多个定义在多个翻译单元中)。

您必须检查二进制文件才能确定发生了什么。如果您声明第一个 staticinline,您可能会看到不同之处。

关于c++ - 为什么没有模板函数比模板函数更二进制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19787516/

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