c++ - 使用模板是否节省内存

标签 c++ templates

在我看来,模板允许我们编写一个适用于不同数据类型的函数或类。

堆栈或链表等容器用于存储数据,但一次只能存储一种类型的数据。为了存储不同类型的数据,我们需要编写同一容器类的不同版本。我们可以通过编写类模板来保存这种重复的代码。

我知道它可以节省程序员的编写工作。但我想知道使用模板是否节省内存。

最佳答案

这取决于您编写的模板。首先,如果一个模板在每个数据类型上创建一个实例会浪费内存。简单地说,模板实例化生成的代码会为每个实例占用程序空间。有了这样一个模板,就相当于手写每个实例。

另一方面,如果给定数据类型的每个实例的代码始终相同,则模板可以进行很多优化。考虑一个像 vector 这样的容器模板,它存储指向任何类型的指针。为什么我们需要额外的代码来存储指向 int 的指针而不是指向 float 的指针?查看 vector 的 STL 实现并寻找指针类型的特化。指针的 vector 模板的所有实例都来自一个!实现指针所需的所有功能的基类。它通常为此使用空指针。

给定数据类型的实例将创建的唯一代码是具体指针类型的转换。但是转换不会生成任何处理器可执行代码,因此无需任何程序空间成本即可完成。

还有大量的模板会在编译时进行操作。这称为元模板编程。此模板通常根本不生成任何代码,并且无需任何程序空间成本。

简而言之:您必须记住这 3 种类型的模板代码才能得到答案。

关于c++ - 使用模板是否节省内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30241950/

相关文章:

c++ - 定义不带类的模板变量

c++ - 如何捕获构造函数的原型(prototype)?

c++ - 在 "template"和函数声明之间使用:template<typename trait> using tr = base_trait<trait> void fn(tr::type arg) { ... }

c++ - 同时递归多个参数包

c++ - 模板结构中的枚举

java - 在 Java 中将所有成员设置为私有(private)或公共(public)访问模式

C++ - cstyle 结构/类包装相关吗?

c++ - WinApi - 如何获取 SHELLDLL_DefView

c++ - 通过 C++ 中的模板参数传递类构造函数

C++11 在基类的模板参数包上调用成员函数(如果存在)