关于内存的理解

来源:互联网 发布:淘宝联盟佣金几号结算 编辑:程序博客网 时间:2024/06/04 23:43
最近突然想通了一些问题,于是记录。从最初学C,我就对一些内存的东西不懂,时间久了,才真正理解C是更贴近底层的语言,和汇编也有千丝万缕的联系。C更多时候是和内存打交道,而关于内存的问题经常在编程和系统里面出现,困扰着我。直到我有一天,我突然想明白了。记得我最初学变量int,double,float范围总是搞不清,其实也是不懂硬件吧。其实现在想想很多问题不懂不要太纠结,慢慢你就会明白了吧。以前,电脑的32与64位也不明白,后来知道是和地址总线有关,直到今天才有所通晓。大家的系统更多的是经典的i386(即x86)升级版,也就是32bit的系统。所谓32位,也就是说,计算机CPU与内存条有32个地址连接,每一处都可用高低电平表示为0或1,那么32位,用排列组合,也就是2∧32bit 即4GB 平时我们定义变量的长度,比如int类型(以下问题都是在32位系统上进行讨论)也就是32个零或者一的排列,比如0000 0000 1010 0011 0000 0111 0000 0010 ,所以32/8为四个字节。所以在所有讲C的课本上变量范围的问题都可以用以上原理解释问题。计算机的蓝屏代码,也是将这32个字母转化为0x开头的十六进制,相当于汇编指令代表的具体含义吧!至于指针变量为什么是四个字节,那是因为变量是内存的一个别名,指针就是地址,地址只不过是内存的编号而已。既然指针变量存储的是首地址,所以要把整个内存条编号,也就是每一位都要知道是0或者1才能唯一确定某个地址在内存中的具体位置。64位的电脑,虚拟内存更大,所以运行的更好一些~
 
0 0