`
lovnet
  • 浏览: 6878639 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

使用C++模板和不使用C++模板两种情况中的执行代码大小近似估计

阅读更多
使用C++模板和不使用C++模板两种情况中的执行代码大小近似估计
使用模板后,对每种数据类型的实例都会生成一段新的执行代码,举例如下:
stack<int> s1;
stack<double> s2:
s1.push(100);
s2.push(5.3);
上面的s1.push(100); 和s2.push(5.3);两条语句调用的虽然都是push()函数,可以通过反编译看到它们的执行代码在内存中的位置是不同,同一个函数在内存中有了两份拷贝。
模板的这种性质使得使用模板的程序比不使用模板的程序执行文件会更大一些,到底会大多少呢?我们可以做一个简单的估计如下:
假设一个没有使用模板的软件执行代码的规模为S,里面有规模为M的执行代码可以改成模板实现,并假设改成模板后源代码规模和原来一样大小,那么不能改成用模板实现的执行代码规模为为S-M,假设每个容器平均的不同数据类型实例有I个,那么使用模板后执行代码规模将变成
S-M + I * M ;
规模将增大大约 (S+(I - 1)*M) / S 倍。
如果有20%的代码是用模板实现的话,即M = 0.2S,并假设I值为10,那么执行代码规模将增加
(S+(10-1)*0.2S) / S = 2.8倍;
在大型软件种I值还会高一些,假设I值为20,并假设有30%的代码用模板实现的情况下,执行代码规模将增加:
(S+(20-1)*0.3S) / S = 6.7倍;
可见使用模板后的软件执行代码很容易膨胀,软件越大,I 值就越大,膨胀的倍数就越容易增大。另外模板代码占整个代码的比例也起了很大的决定性作用,如果大型软件中模板实现的代码占整个代码的比例上升到一定程度,执行软件规模将膨胀很多倍。执行时执行文件装载到内存中占用的内存也自然跟着增长了很多倍。
以上只是一个近似估计,如有不当之处,请指正。
分享到:
评论

相关推荐

    小波变换C++源代码

    6. **C++编程技巧**:在实现小波变换的过程中,可能运用了C++的模板、面向对象编程、STL容器(如vector和matrix)以及高效算法(如递归、迭代)。源代码阅读有助于理解这些编程技巧。 7. **文件读写操作**:如果...

    C++求导算法和实现

    在编程领域,尤其是在科学计算和数据分析中,求导算法是一种非常重要的工具。C++作为一种强大的、通用的编程语言,能够高效地实现各种数值计算方法,包括求导。本篇文章将深入探讨C++如何实现求导算法,以及在实际...

    计算Zernike矩的MATLAB代码和C++代码

    本资源包含MATLAB和C++两种编程语言实现的Zernike矩计算代码,对于学习和理解Zernike矩的计算过程非常有帮助。 首先,MATLAB是一种广泛用于数值计算和数据分析的高级编程环境,它的语法简洁且易于理解。在MATLAB中...

    数值微分 c++源代码

    在C++中实现数值微分,首先需要定义函数,可以使用函数指针或者模板类来处理各种类型的函数。然后,定义一个计算差商的函数,该函数接受函数对象、点x和步长h作为参数。为了提高精度,可以使用复化中心差商,即多次...

    小波变换C++代码

    在C++代码中,可以使用模板类来实现对不同数据类型的通用支持。同时,为了提高效率,可以利用多线程或者OpenMP库进行并行计算。 在`wavelet1`这个文件中,很可能包含了小波变换类的实现,包括分解和重构的函数。...

    s型曲线两个实现c++.zip

    本文将深入探讨C++中实现S型曲线的两种方法,并结合标签“c++”进行详细阐述。 首先,S型曲线,数学上表示为函数f(x) = 1 / (1 + e^(-x)),是生物学、经济学和统计学中的一个常见模型,尤其在神经网络激活函数中,...

    c++STL学习——各种容器的技术总结和用法代码实例

    这两种容器基于哈希表,提供近似常数时间的插入、查找和删除操作。无序集合和无序映射不保证元素顺序,但查找速度快,适合对顺序无要求且追求效率的场景。 8. 迭代器(Iterator): 迭代器是STL的重要概念,它像...

    C++模版特化

    ### C++模板特化概述与详解 在C++编程语言中,模板特化是一种非常重要的机制,它允许程序员为特定类型的模板提供定制化的实现。本文将深入探讨C++中的类模板特化,尤其是针对单个模板参数的不同特化类型:特化为...

    二维高斯积分C++源代码

    在VS2005中,这个程序可能使用了标准模板库(STL)来处理数组和矩阵操作,以及可能包含了自定义的矩阵类来进行高效的向量和矩阵运算。它还可能使用了循环或其他控制结构来迭代处理各个节点。 通过这个源代码,开发者...

    C++ STL标准程序库开发指南 源代码.rar

    C++ STL(Standard Template Library,标准模板库)是C++编程中的一个重要组成部分,它提供了一系列高效、可重用的数据结构和算法。这个压缩包“C++ STL标准程序库开发指南 源代码.rar”包含了C++ STL的源代码,对于...

    计算方法 C++源代码

    在IT领域,计算方法是解决复杂...这些计算方法在C++中实现时,通常会结合STL容器、模板类和算法库,以提高代码的可读性和效率。通过理解并熟练掌握这些方法,开发者能够更好地处理各种计算问题,提高软件的性能和精度。

    最小二乘法线性拟合C++

    最小二乘法线性拟合是统计学和数据分析中一种常用的方法,用于寻找一组数据点的最佳直线近似。在C++编程环境下实现这个方法,可以帮助我们处理和理解大量的实验或观测数据。本篇将深入探讨最小二乘法的理论基础,并...

    C++程序设计教程第三章函数课件

    在C++编程语言中,函数是程序的基本构造块,它们封装了特定的代码逻辑,使得这些逻辑可以重复使用。函数的定义和使用是C++学习的重要部分,这有助于提高代码的可读性和可维护性。 第三章的内容主要涵盖以下几个方面...

    遗传算法c++代码.rar

    在遗传算法的实现中,C++能够提供快速的执行速度和良好的控制结构,便于实现算法的各个步骤。 遗传算法的基本流程包括以下几个主要步骤: 1. 初始化种群:随机生成一组解,每个解代表一个可能的解决方案,形成初始...

    清华大学-数据结构C++

    堆有最大堆和最小堆两种形式,具有快速获取最大或最小元素的能力,并且可以在对顶元素进行操作后快速调整堆的结构。 栈是一种后进先出(LIFO)的数据结构,常用在函数调用、表达式求值等场景。C++中的`std::stack`...

    NOIP C++ 代码库

    ### NOIP C++ 代码库知识点详解 #### 一、概述 NOIP C++ 代码库,主要面向参加信息学奥林匹克竞赛(OI)的学生提供了一系列基础且实用的C++编程技巧与算法。此代码库由王丁子睿于2015年11月整理发布,包含了大量...

    电力系统潮流计算程序(c++)牛拉法、pq分解(极坐标)法两种.rar

    本程序采用C++编程语言实现,包括牛拉法(牛顿-拉弗森法)和PQ分解(极坐标)法两种算法,这两种方法都是解决非线性电力系统潮流问题的常用技术。 1. 牛顿-拉弗森法(Newton-Raphson Method) 牛顿-拉弗森法是一种...

    数据结构与算法c++语言描述.rar

    这两种结构在递归和处理事件时非常有用。 树结构如二叉搜索树(BST),其每个节点都有最多两个子节点,左子节点的值小于父节点,右子节点的值大于父节点,便于快速查找、插入和删除操作。红黑树是自平衡的二叉查找...

Global site tag (gtag.js) - Google Analytics