博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
空间开销模型源码
阅读量:5884 次
发布时间:2019-06-19

本文共 3703 字,大约阅读时间需要 12 分钟。

此源码参考编程珠玑附录C时空开销源码例一。改动在于用template代替Macro。

Measure 方法:连续new类型T十二次,查看系统为每一个对象分配的实际大小。

结论:在64位的机器上,如果类型大小小于等于4字节,则分配64字节的空间。如果类型大小大于4字节,则最低分配72字节,以后每多出8字节,就分配多8字节。

 

#include "stdafx.h"#include 
using namespace std;template
void MEASURE() { cout << typeid(T).name() << "\t"; cout << sizeof(T) << "\t"; int lastp = 0; for (int i = 0; i < 11; i++) { T *p = new T; int thisp = (int) p; if (lastp != 0) cout << " " << thisp - lastp; lastp = thisp; } cout << "\n"; }template
struct structii { char c[i]; };int main(){ cout << "Raw sizeof"; cout << "\nsizeof(char)=" << sizeof(char); cout << " sizeof(short)=" << sizeof(short); cout << " sizeof(int)=" << sizeof(int); cout << "\nsizeof(float)=" << sizeof(float); cout << " sizeof(struct *)=" << sizeof(structii<1> *); cout << " sizeof(long)=" << sizeof(long); cout << "\nsizeof(double)=" << sizeof(double); cout << "\n\nMEASURE\n"; MEASURE
<1>>(); MEASURE
<2>>(); MEASURE
<3>>(); MEASURE
<4>>(); MEASURE
<5>>(); MEASURE
<6>>(); MEASURE
<7>>(); MEASURE
<8>>(); MEASURE
<9>>(); MEASURE
<10>>(); MEASURE
<11>>(); MEASURE
<12>>(); MEASURE
<13>>(); MEASURE
<14>>(); MEASURE
<15>>(); MEASURE
<16>>(); MEASURE
<17>>(); MEASURE
<18>>(); MEASURE
<19>>(); MEASURE
<20>>(); MEASURE
<21>>(); MEASURE
<22>>(); MEASURE
<23>>(); MEASURE
<24>>(); MEASURE
<25>>(); MEASURE
<26>>(); MEASURE
<27>>(); return 0;}

Output on my machine:x64

Raw sizeofsizeof(char)=1  sizeof(short)=2  sizeof(int)=4sizeof(float)=4  sizeof(struct *)=4  sizeof(long)=4sizeof(double)=8MEASUREstruct structii<1>      1        12904 -9184 9616 64 64 64 368 64 64 64struct structii<2>      2        64 64 64 64 64 64 64 64 64 64struct structii<3>      3        64 64 64 64 64 64 64 64 64 64struct structii<4>      4        64 64 64 64 64 64 64 64 64 64struct structii<5>      5        72 72 72 72 72 72 72 72 72 72struct structii<6>      6        72 72 72 72 72 72 72 72 72 72struct structii<7>      7        72 72 72 72 72 72 72 72 72 72struct structii<8>      8        72 72 72 72 72 72 72 72 72 72struct structii<9>      9        72 72 72 72 72 72 72 72 72 72struct structii<10>     10       72 72 72 72 72 72 72 72 72 72struct structii<11>     11       72 72 72 72 72 72 72 72 72 72struct structii<12>     12       72 72 72 72 72 72 72 72 72 72struct structii<13>     13       80 80 80 80 80 80 80 80 80 80struct structii<14>     14       80 80 80 80 80 80 80 80 80 80struct structii<15>     15       80 80 80 80 80 80 80 80 80 80struct structii<16>     16       80 80 80 80 80 80 80 80 80 80struct structii<17>     17       80 80 80 80 80 80 80 80 80 80struct structii<18>     18       80 80 80 80 80 80 80 80 80 80struct structii<19>     19       80 80 80 80 80 80 80 80 80 80struct structii<20>     20       80 80 80 80 80 80 80 80 80 80struct structii<21>     21       88 88 88 88 88 88 88 88 88 88struct structii<22>     22       88 88 88 88 88 88 88 88 88 88struct structii<23>     23       88 88 88 88 88 88 88 88 88 88struct structii<24>     24       88 88 88 88 88 88 88 88 88 88struct structii<25>     25       88 88 88 88 88 88 88 88 88 88struct structii<26>     26       88 88 88 88 88 88 88 88 88 88struct structii<27>     27       88 88 88 88 88 88 88 88 88 88

 

转载于:https://www.cnblogs.com/liquadli/p/3611108.html

你可能感兴趣的文章
劣质代码评析——猜数字问题(上)
查看>>
纸上谈兵: 栈 (stack)
查看>>
Windows phone8 基础篇(三) 常用控件开发
查看>>
Oracle学习笔记之五,Oracle 11g的PL/SQL入门
查看>>
大叔手记(3):Windows Silverlight/Phone7/Mango开发学习系列教程
查看>>
考拉消息中心消息盒子处理重构(策略模式)
查看>>
so easy 前端实现多语言
查看>>
【追光者系列】HikariCP源码分析之ConcurrentBag&J.U.C SynchronousQueue、CopyOnWriteArrayList...
查看>>
canvas系列教程05-柱状图项目3
查看>>
css绘制几何图形
查看>>
HTML标签
查看>>
理解JS中的Event Loop机制
查看>>
转载:字符编码笔记:ASCII,Unicode和UTF 8
查看>>
修复看不懂的 Console Log
查看>>
Android跨进程通信 AIDL使用
查看>>
ajax常见面试题
查看>>
结合kmp算法的匹配动画浅析其基本思想
查看>>
vue进行wepack打包执行npm run build出现错误
查看>>
【d3.js v4基础】过渡transition
查看>>
VUEJS开发规范
查看>>