数据在内存中的存储,原,反,补,内存方式

来源:互联网 发布:js解析json数据object 编辑:程序博客网 时间:2024/06/05 03:52

要了解数据在内存中的存储,就要了解我们经常接触的数据类型,因为不同的数据类型存储方式是有区别的。我们经常用的数据类型包括char,short,int,long,float,double.类型决定了我们去开辟内存空间的大小。


整型家族是如何存储的呢?


让我们先来了解什么是原码 ,反码 ,补码。这是计算机中的符号数的三种表示方法,分为符号位和数值位两部分。符号位0表示正,1表示负。


原码:第一位是符号位,其余位就是值

反码:在原码的基础上,符号位不变,其余位按位取反。

补码:在反码的基础上,+1。


对于整形来说,数据存放内存中的是补码。在计算机内部系统中,使用补码,可以将符号位和数值位通一处理。


浮点数在内存中的存储又是怎样的呢?


根据国际标准IEEE754,任意一个二进制浮点数都可以用下面形式表示:



5.0,写为二进制是 101.0, 此时S=0,M=1.01,E=2

-5.0,写为二进制是-101.0,此时S=1,M=1.01,E=2


对有效数字M和指数E,还有一些特别规定。

在计算机内部保存M,默认第一个数总是1,只保留小数点后面的数。读取时自动将省去的1加上。E比较特殊,E是11位时,它的取值范围是1~2047。E是8位时,它的取值范围是0~255。

IEEE754规定,存入内存的E要加一个中间值,11位的E存入内存时中间数是1023,8位的E的中间值是127。














内存分配是指在程序执行的过程中分配或者回收存储空间的分配内存的方法


C语言内存方式分为3种。

静态存储区域分配

内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。比如全局变量和静态变量。
栈上创建
在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,优点是效率高,缺点是分配的内存容量有限。
堆上分配(动态内存分配)
程序在运行的时候用malloc或new申请任意多少的内存
程序员自己负责在何时用free或delete释放内存。
动态内存的生存期由程序员决定,使用非常灵活,但如果在堆上分配了空间,就有责任回收它,否则运行的程序会出现内存泄漏,频繁地分配和释放不同大小的堆空间将会产生堆内碎块。

原创粉丝点击