关于位域如何节省内存(C++)
位域: 最先使用在c语言中后来C++继承了这一优良的特点。
举个栗子: int --> 4字节 2^32位 ,如果我们只需要其表达一个0~16的数字,
使用一个int就显得稍稍有些许浪费,所以我们这里就可以使用到位域0~16 --> 2^1 ~ 2^5
我们就可以这样来声明了: int sudo: 5; 就可以了!
/*
设计一个结构体存储学生的成绩信息,
需要包括学号,年纪和成绩3项内容,学号的范围是0~99 999 999,
年纪分为freshman,sophomore,junior,senior四种,
成绩包括A,B,C,D四个等级。
请使用位域来解决:
*/
#include<iostream> using namespace std; enum Age{ freshman , sophomore , junior ,senior } ; enum grade{ A , B , C , D }; class student {
private :
unsigned int num :;
Age age : ;
grade gra: ;
public :
/* 析构函数 */
~ student(){
cout<<"student has been xigou l ! ";
}
/* 构造函数 */
student(unsigned int num , Age age , grade gra );
void show();
} ; student::student(unsigned int num , Age age , grade gra ):num(num),age(age),gra(gra){
}; inline void student::show(){ cout<<"学号为:"<<this->num<<endl;
string sag;
//采用枚举
switch(age){
case freshman : sag = "freshman" ; break ;
case junior : sag = "junior" ; break ;
case senior : sag = "senior" ; break ;
case sophomore : sag = "sophomore" ; break ;
}
cout<<"年纪为:"<<sag<<ends;
cout<<"成绩为:"<<char('A'+gra)<<endl;
} int main(int args [] ,char argv[]){ student stu(,sophomore,C) ;
stu.show();
cout<<sizeof stu<<endl;
return ;
}
/*
编写一个名为CPU的类,描述一个CPU的以下信息:
时钟频率,最大不会超过3000MHZ = 3000*10^6 ;字长,可以
是32位或64位;核数,可以是单核,双核,或四核,是否
支持超线程。各项信息要求使用位域来表示。通过输出sizeof
(CPU)来观察该类所占的字节数。
*/
#include<iostream>
#include<string>
using namespace std;
//字长
enum word{ a, b };
//核数
enum keshu{one ,two ,four };
//是否支持超线程
enum es_no{yes ,no} ; class intel_CPU{
private :
// 2^29 = 536 870 912
unsigned int tp : ;
word wd : ;
keshu ks : ;
es_no en : ;
public :
//构造函数
intel_CPU(int tp=,word wd=a,keshu ks=two,es_no en=no):
tp(tp),wd(wd),ks(ks),en(en){
cout<<"this is a construct !"<<endl;
};
//析构函数
~intel_CPU();
void show(); };
intel_CPU::~intel_CPU(){ cout<<"this is a 析构函数!!"<<endl;
} void inline intel_CPU::show() { cout<<"时钟频率为:"<<ends;
cout<<tp<<endl;
cout<<"字长为【32 or 64】: ";
if(wd==a)cout<<<<endl;
else cout<<<<endl;
switch (ks){
case one : cout<<"单核"<<endl; break;
case two : cout<<"双核"<<endl; break;
case four: cout<< "四核”"<<endl; break;
default : cout<<"山寨机,没核" ; break;
}
cout<<"是否支持超线程模式:"<< (en==yes?"支持":"不支持")<<endl;
} int main(){ intel_CPU icp();
icp.show();
cout<<sizeof icp<<endl; }
关于位域如何节省内存(C++)的更多相关文章
- [PHP]引用返回与节省内存
PHP中的引用是什么:1.在 PHP 中引用意味着用不同的名字访问同一个变量内容2.引用可以被看作是 Unix 文件系统中的硬链接. 3.使用unset的话,只是删除他这个名字自身对内容的引用,并没有 ...
- python类与对象-如何为创建大量实例节省内存
如何为创建大量实例节省内存 问题举例 在网络游戏中,定义玩家类Player(id, name, level...), 每个玩家在线将创建一个Player实例,当在线人数很多时,将产生大量实例, 如何降 ...
- java内存缓存,节省内存
缓存的对象 这个问题就是我们上面提到的极端情况,在Java中,会对-128到127的Integer对象进行缓存,当创建新的Integer对象时,如果符合这个这个范围,并且已有存在的相同值的对象,则返回 ...
- 这种实现方式比使用 += 要更节省内存和 CPU,尤其是要串联的字符串数目特别多的时候。
这种实现方式比使用 += 要更节省内存和 CPU,尤其是要串联的字符串数目特别多的时候. package main import ( "bytes" "fmt" ...
- JS高级---构造函数通过原型添加方法,原型的作用: 共享数据, 节省内存空间
JS高级---构造函数,通过原型添加方法,原型的作用: 共享数据, 节省内存空间 构造函数 //构造函数 function Person(sex, age) { this.sex = sex; thi ...
- 牺牲速度来节省内存,Redis是觉得自己太快了吗
前言 正常情况下我们选择使用 Redis 就是为了提升查询速度,然而让人意外的是,Redis 当中却有一种比较有意思的数据结构,这种数据结构通过牺牲部分读写速度来达到节省内存的目的,这就是 zipli ...
- 节省内存的循环banner(一)
循环banner是指scrollview首尾相连,循环播放的效果,使用非常广泛.例如淘宝的广告栏等. 如果是简单的做法可以把所有要显示的图片全部放进一个数组里,创建相同个数的图片视图来显示图片.这样的 ...
- C语言位域——精妙使用内存
参考链接 https://blog.csdn.net/yanbober/article/details/8697967 https://blog.csdn.net/Tommy_wxie/artic ...
- 大数据量场景下storm自定义分组与Hbase预分区完美结合大幅度节省内存空间
前言:在系统中向hbase中插入数据时,常常通过设置region的预分区来防止大数据量插入的热点问题,提高数据插入的效率,同时可以减少当数据猛增时由于Region split带来的资源消耗.大量的预分 ...
随机推荐
- VBA中的FileSystemObject对象(FSO)和文本流
对FileSystemObject一直略有耳闻,VBA爱好者常常简称为FSO对象. 在Scripting类库中有三个可以直接使用NEW关键字实例化的类,第一个就是常用的字典,第三个是FSO. 一.FS ...
- [SAP ABAP开发技术总结]报表事件
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...
- ManualResetEvent & AutoResetEvent
参考资料: 1. https://msdn.microsoft.com/en-us/library/system.threading.manualresetevent.aspx 2. https: ...
- jpg 批量压缩工具 v1.0
工作需要经常压缩大量图片,网上搜了一些 使用起来总觉得不方便.昨天自己用AIR 写了一个,功能简单,需要的朋友可以自己 下载使用win 版绿色版 http://pan.baidu.com/s/1k ...
- [转 ]-- Java线程池使用说明
Java线程池使用说明 原文地址:http://blog.csdn.net/sd0902/article/details/8395677 一简介 线程的使用在java中占有极其重要的地位,在jdk1. ...
- iOS - OC 基本语法
1.常见文件扩展名 .c C 语言源文件 .cc..cpp C++ 语言源文件 .m Objective-C 源文件 .mm Objective-C++ 源文件 .h 头文件 .pl Perl 源文件 ...
- js 返回上一页
--------2016-6-14 16:37:30-- source:[1]js返回上一页
- mysql 循环控制
1.使用whileDROP PROCEDURE IF EXISTS `addstudent`;DELIMITER ;;CREATE PROCEDURE `addstudent`(iNum int)BE ...
- thinkphp分页效果的制作,按查询条件分页正确做法
PHP代码: <?php namespace Home\Controller; use Think\Controller; use Home\Clas\Cate; class IndexCont ...
- 多线程调用HttpWebRequest并发连接限制
.net 的 HttpWebRequest 或者 WebClient 在多线程情况下存在并发连接限制,这个限制在桌面操作系统如 windows xp , windows 7 下默认是2,在服务器操作 ...