C语言中变量在内存中是如何存放的

首先我们知道计算机有32位/64位,那这里的32位/64位代表什么意思呢?

其实这里的32位/63位代表地址线,如果你的电脑是32位的,就是地址总线宽度为32位,一次可以发送的一个数据是32位的,则寻址的单元最大就是32位数据的最大值,就是2的32次方。地址总线宽度决定了CPU可以访问的物理地址空间,简单地说就是CPU到底能够使用多大容量的内存。

为了能够有效的访问到内存中的每个单元,给内存单元进行编号,这个编号就是内存单元地址,通过地址可以进行访问该内存。

那你知道每一个内存单元的大小是多少吗?

答案是1个字节,这里是一个字节的原因其实是通过计算算出来的最合适的大小,这样可以更加有效的利用内存。

首先8 bits(比特)= 1byte(字节)   1KB=1024Bytes 1MB=1024KB 1GB=1024MB

原因解释:

①假设一个内存单元的大小是一个bit,那么32位内存能存储的最大的数据量是2^32个bit, 转化为十进制是4294967296bit

4294967296Bit = 536870912Byte = 524288KB = 512MB = 0.5GB

这样算下来总的能存储的内存大小才是0.5GB,这也太小了吧,明显不合适。

如果定义一个char ch = 'w';一个字符在内存中占一个字节,一个内存单元就是一个bit,存储一个字符就要使用8个内存单元,存储一个整型变量就要使用32个内存单元,不易于操作修改内存。

扫描二维码关注公众号,回复: 12730748 查看本文章

②假设一个内存单元的大小是一个byte,那么32位内存能存储的最大的数据量是2^32个byte, 转化为十进制是4294967296byte

4294967296byte = 4194304KB = 4096MB = 4GB

刚好定义一个字符占据一个内存单元。这样算下来感觉才比较正常。

③同理,假设一个内存单元的大小是kb,那么

4294967296KB = 4194304MB = 4096GB = 4TB ,这样就有一些离谱了吧。

加入你要定义一个字符,它只占据一个字节的大小,但是它要放在一个内存单元中就占据了一个kb的大小,浪费了内存资源

综上的考量下来,你是否明白了内存中一个内存单元为什么是一个字节的大小了呢?不过这也只是我学习到的和思考出来的结果,如果你有不同的见解,我们可以继续探讨一下。

猜你喜欢

转载自blog.csdn.net/qq_43941925/article/details/109838417