关于位域如何节省内存(C++)
位域: 最先使用在c语言中后来C++继承了这一优良的特点。
举个栗子: int --> 4字节 2^32位 ,如果我们只需要其表达一个0~16的数字,
使用一个int就显得稍稍有些许浪费,所以我们这里就可以使用到位域0~16 --> 2^1 ~ 2^5
我们就可以这样来声明了: int sudo: 5; 就可以了!
1 /* 2 设计一个结构体存储学生的成绩信息, 3 需要包括学号,年纪和成绩3项内容,学号的范围是0~99 999 999, 4 年纪分为freshman,sophomore,junior,senior四种, 5 成绩包括A,B,C,D四个等级。 6 请使用位域来解决: 7 */ 8 #include<iostream> 9 10 using namespace std; 11 12 enum Age{ freshman , sophomore , junior ,senior } ; 13 14 enum grade{ A , B , C , D }; 15 16 class student { 17 private : 18 unsigned int num :27; 19 Age age : 2 ; 20 grade gra:2 ; 21 public : 22 /* 析构函数 */ 23 ~ student(){ 24 cout<<"student has been xigou l ! "; 25 } 26 /* 构造函数 */ 27 student(unsigned int num , Age age , grade gra ); 28 void show(); 29 } ; 30 31 student::student(unsigned int num , Age age , grade gra ):num(num),age(age),gra(gra){ 32 }; 33 34 inline void student::show(){ 35 36 cout<<"学号为:"<<this->num<<endl; 37 string sag; 38 //采用枚举 39 switch(age){ 40 case freshman : sag = "freshman" ; break ; 41 case junior : sag = "junior" ; break ; 42 case senior : sag = "senior" ; break ; 43 case sophomore : sag = "sophomore" ; break ; 44 } 45 cout<<"年纪为:"<<sag<<ends; 46 cout<<"成绩为:"<<char('A'+gra)<<endl; 47 } 48 49 int main(int args [] ,char argv[]){ 50 51 student stu(12345678,sophomore,C) ; 52 stu.show(); 53 cout<<sizeof stu<<endl; 54 return 0; 55 }
View Code
1 /* 2 编写一个名为CPU的类,描述一个CPU的以下信息: 3 时钟频率,最大不会超过3000MHZ = 3000*10^6 ;字长,可以 4 是32位或64位;核数,可以是单核,双核,或四核,是否 5 支持超线程。各项信息要求使用位域来表示。通过输出sizeof 6 (CPU)来观察该类所占的字节数。 7 */ 8 #include<iostream> 9 #include<string> 10 using namespace std; 11 //字长 12 enum word{ a, b }; 13 //核数 14 enum keshu{one ,two ,four }; 15 //是否支持超线程 16 enum es_no{yes ,no} ; 17 18 class intel_CPU{ 19 private : 20 // 2^29 = 536 870 912 21 unsigned int tp : 29 ; 22 word wd : 1 ; 23 keshu ks : 2 ; 24 es_no en : 1 ; 25 public : 26 //构造函数 27 intel_CPU(int tp=0,word wd=a,keshu ks=two,es_no en=no): 28 tp(tp),wd(wd),ks(ks),en(en){ 29 cout<<"this is a construct !"<<endl; 30 }; 31 //析构函数 32 ~intel_CPU(); 33 void show(); 34 35 }; 36 intel_CPU::~intel_CPU(){ 37 38 cout<<"this is a 析构函数!!"<<endl; 39 } 40 41 void inline intel_CPU::show() { 42 43 cout<<"时钟频率为:"<<ends; 44 cout<<tp<<endl; 45 cout<<"字长为【32 or 64】: "; 46 if(wd==a)cout<<32<<endl; 47 else cout<<64<<endl; 48 switch (ks){ 49 case one : cout<<"单核"<<endl; break; 50 case two : cout<<"双核"<<endl; break; 51 case four: cout<< "四核”"<<endl; break; 52 default : cout<<"山寨机,没核" ; break; 53 } 54 cout<<"是否支持超线程模式:"<< (en==yes?"支持":"不支持")<<endl; 55 } 56 57 int main(){ 58 59 intel_CPU icp(123456789); 60 icp.show(); 61 cout<<sizeof icp<<endl; 62 63 }
转载于:https://www.cnblogs.com/gongxijun/p/4334448.html
关于位域如何节省内存(C++)相关推荐
- java 内存_java节省内存的几条建议
java节省内存的几条建议 引导语:Java的主要工作是通过编程语言来制作互联网页面.制作动态效果以及网站等技术,以下是小编整理的java节省内存的几条建议,欢迎参考阅读! 1. 尽量在合适的场合使用 ...
- 2020-12-11 keras通过model.fit_generator训练模型(节省内存)
keras通过model.fit_generator训练模型(节省内存) 前言 前段时间在训练模型的时候,发现当训练集的数量过大,并且输入的图片维度过大时,很容易就超内存了,举个简单例子,如果我们有2 ...
- pandas的dataframe节省内存
##############################第1种################################################### [1]代码如下(下面的会损失数 ...
- javafx阴影_JavaFX技巧来节省内存! 属性和可观察对象的阴影场
javafx阴影 在 JavaFX的世界中, Properties API允许UI开发人员将值绑定到UI控件. 这种功能出奇的简单,但是当对象模型经常使用属性时,应用程序可能会很快耗尽内存. 我通常会 ...
- JavaFX技巧来节省内存! 属性和可观察物的阴影场
在 JavaFX的世界中, Properties API允许UI开发人员将值绑定到UI控件. 这种功能非常容易,但是当对象模型经常使用属性时,应用程序可能会很快耗尽内存. 我通常会编写两个单独的对象, ...
- python类与对象-如何为创建大量实例节省内存
如何为创建大量实例节省内存 问题举例 在网络游戏中,定义玩家类Player(id, name, level...), 每个玩家在线将创建一个Player实例,当在线人数很多时,将产生大量实例, 如何降 ...
- 节省内存的嵌入式软件设计技巧
现在新买的安卓千元机都是2G内存的了,我们还要绞尽脑汁地省内存?是的,那是高端处理器的特色,咱们这里讲的是资源紧缺型的嵌入式系统设计方法.一般主控是单片机控制器的电子产品的成本跟内存的关系可是成正比的 ...
- 2.6.29的一个节省内存的补丁
今天看linux内核的maillist,发现了一个很有创意的补丁,叫做ksm,也就是kernel shared memory driver,读了之后感觉太有创意了,可是不知道到底有没有实际用处.这个补 ...
- C++随记总结(1)----关于C++中的大小端、位段(惑位域)和内存对齐
C++随记总结(1)----关于C++中的大小端.位段(惑位域)和内存对齐 声明:欢迎任何人和组织转载本blog中文章,但必须标记文章原始链接和作者信息. 本文链接:http://www.cnblog ...
最新文章
- Android 读取meta-data元素的数据
- 微软10月起将向安全厂商提前告知安全补丁内容
- 丢人现眼……GitHub阿波罗11号代码仓库惨遭中文灌水
- Windows Server 2008 R2模板机制作(VMware Workstation)
- 先自己看文档和百度再沟通
- Robot framework 引入 Selenium2Library 类库:
- spring(6) 渲染web视图
- 设计一算法查找链表的中间结点。要求该算法的时间复杂度为O(n),空间复杂度为O(1)
- TensorFlow tf.feature_column
- 【优化求解】基于matlab粒子群与遗传算法混合算法求解切削参数优化问题(以成本和碳排放量为目标函数)【含Matlab源码 1619期】
- 最短路径例题(Floyd、Dijkstra)
- ecshop设置会员头像
- CRM系统管理日常计划
- 十五、陈述句_高频扩充
- 【长按图片识别】uniapp vue开发时,点击图片识别—实现转发、收藏、识别图片二维码
- 关于复活节Easter的由来及习俗你了解多少呢
- LINUX杀掉指定进程 脚本 守护进程
- dz论坛在线咨询使用不了,解决办法
- 美国“黑色星期五”单日销量不及双十一
- 网络设备割接—七大步骤
热门文章
- br php 配置,无法载入 mcrypt 扩展,br /请检查 PHP 配置终极解决方案
- 加密软件漏洞评测系统_惠州上线软件产品登记测试企业
- 纯新手DSP编程--5.18--调试
- VMwar配置静态ip
- 编译原理教程_5 自底向上分析
- Java项目迁移到uap上_Tomcat启动,不能加载项目问题。
- 计算机系统基础知识——详解二进制正负数及补码设计
- java标识符定义_Java标识符命名规范
- Cannot find class ‘org.apache.hudi.hadoop.HoodieParquetInputFormat‘
- 零基础、转行学习Python是否还在纠结?这里告诉你答案!