11.2 开启指针新篇章

发布于 21 天前  212 次阅读


要谈指针就必须要讲明白内存。内存是什么呢?

内存是电脑上特别重要的存储器,计算机中所有程序的运行都是在内存中进行

所以为了有效地使用内存,我们将内存这一块大的空间划分成一个一个的小格子

然后给这些小格子编号,每一个编了号的小格子就是一个内存单元

那么内存是如何编号的?一个内存单元(小格子)是多大的空间?

以32位操作系统为例,这32位就相当于32根地址线,这32根地址线意味着系统可以寻址的内存空间为 2的32次方个字节,即总共可以寻址 4GB 的内存。这是因为每根地址线可以表示两个状态(0和1),因此 32 根地址线可以组合出 2的32次方种不同的地址(32根,每根可以是0或者1,互为独立事件)


1.如何编号

内存的地址范围内存地址从 0 到 2^32-1,即从 0 到 4,294,967,295(十进制)

so,我们比如说这个0,这个0实际上是00000000000000000000000000000000(32个!这并非十进制,而是二进制序列

这表示系统可以使用的地址范围是 0x00000000 (0x00000000表示的就是8个十六进制位,也就是32个二进制位,所有位都是0)到 0xFFFFFFFF(十六进制)

//每个十六进制位可以表示16种不同的值(从0到9和从A到F),而每个二进制位只能表示2种不同的值(0和1)。因此,1个十六进制位可以用4个二进制位来表示(相当于把16进制16个值分成4块,每一块就是一个独立的二进制序列,每一块都有两种选择的值(0或1),独立事件,相乘,就是2^4=16)

为什么是到2^32-1结束而不是2^32结束?这是因为计算机的内存地址从0开始,而不是1


2.一个内存单元是多大空间

我们知道,内存的单位大小依次是bit(就是一个位)

然后是byte(就是字节,bye插入一个t)

然后是KB、MB、GB、TB、PB...

一个内存单元的大小通常取决于计算机的架构和内存的类型

内存单元通常是一个字节(1 byte),即8个二进制位(bit)。这意味着每个内存地址通常对应一个字节

然而,在某些情况下,内存单元的大小可能会更大。例如:

  1. 字(Word):在某些计算机架构中,内存单元可能被定义为一个“字”。一个字的大小可以是16位(2字节)、32位(4字节)或64位(8字节)(位即bit),这具体取决于处理器的架构。例如,32位处理器的字通常是4字节而64位处理器的字通常是8字节
  2. 双字(Double Word):在一些系统中,双字是指两个字的大小。例如,在32位系统中,双字通常是8字节,而在64位系统中,双字通常是16字

//所以我现在得知,我之前起初学变量类型时并不准确,就比如long类型的变量,在64位系统上,long类型通常是64位(8字节),在32位系统上,long类型通常是32位(4字节)。我将它归为4字节,其实那是在32位系统的基础上的4字节

//顺便一提,long long类型在C99标准中引入,保证至少为64位(8字节),这在所有的平台上(无论是在32位系统还是64位系统上)都是一致的

届ける言葉を今は育ててる
最后更新于 2024-11-05