大量创建的对象需要谨慎构建其数据成员
来源:互联网 发布:php源码加密软件 编辑:程序博客网 时间:2024/05/23 17:32
我们在一些一个class或者struct时,数据成员的顺序对程序的编译和执行没有什么影响,但对class或struct占用的空间却可能产生影响。因此适当的排列数据成员的顺序,以及精心的计划class或struct中数据成员的大小,对于那些需要创建几万、几十万、几千万的对象来说,空间上的差别就很有价值了。
下面先看看一个利用struct将一个4字节的整数分成两部分用的例子:
struct PackStruct { unsigned int char_:8; unsigned int frequence_:24;}
这个结构占据了4个字节,它用unsigned int的前8位用于存储1个字符,而后24位用于存储该字符的频率,频率可以存储2的24次方个,也就是说可以统计16777216个字符的文本,也就是16M的文本,如果超出了16M,那么可能会产生频率的溢出(当16M都是同一个字符时)。
如果将结构定义为下面的形式:
struct UnpackStruct { char char_; unsigned int frequence_;}
UnpackStruct看似仅仅增加了1个字节,但实际UnpackStruct占用了8个字节,这主要是因为C++缺省使用4字节对齐的缘故,这样的对齐有利与提高存取速度,是一种以空间换时间的策略。
参考文献[1]对C++数据的对齐进行了非常全面的分析,是一篇非常有价值的文章。
参考文献:
[1]http://pppboy.blog.163.com/blog/static/30203796201082494026399/
- 大量创建的对象需要谨慎构建其数据成员
- 含虚函数的struct在其构造中要谨慎使用memset函数对数据成员清零
- new 对象时,其静态成员变量、非静态成员、代码块、构建器的执行顺序
- 数据成员的对其原则
- 创建过程删除大量数据的方法
- 用基类指针创建的派生类对象,从而无法访问派生类对象的数据和成员
- 用基类指针创建的派生类对象,无法访问派生类对象的数据和成员
- 访问对象的数据成员
- C++对象的数据成员
- deep_c++:对象的数据成员
- 关于遇到需要导入大量数据的问题
- 职场的你需要谨慎
- 如何快速创建一个含有大量数据的表?
- VC++6.0中定义一个类的对象后,用“.”访问其成员函数和成员变量时,其成员函数和成员变量没有自动弹出
- 关于数据库循环插入大量对象数据的解决办法
- 需要求3个长方体的体积,写一个基于对象的程序,数据成员包括 length width height 要求用成员函数实现以下功能
- C++中数据成员,对象的内存空间
- C++对象中数据成员的布局
- android linux基础知识总结
- IOS文件系统及其相关操作(NSFileManager,NSFileHandle)
- oracle ora_00911 无效字符错误
- apache webdav
- 文件工具类FileUtil
- 大量创建的对象需要谨慎构建其数据成员
- sql 选择两列中最大的那列
- Html使用Css的方式
- 获得项目路径 【一些转载】
- POJ 2886 Who Gets the Most Candies?
- 可重入函数
- Boost.Interprocess使用手册翻译之一:介绍 (Introduction)
- CRM 2011 Developer ToolKit
- ms sql常用语句汇总