使用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 值就越大,膨胀的倍数就越容易增大。另外模板代码占整个代码的比例也起了很大的决定性作用,如果大型软件中模板实现的代码占整个代码的比例上升到一定程度,执行软件规模将膨胀很多倍。执行时执行文件装载到内存中占用的内存也自然跟着增长了很多倍。
以上只是一个近似估计,如有不当之处,请指正。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值