上图是寻址逻辑电路,输入端 A、B 共同组成 2 bit 的地址线,2 bit 的地址线可以表示 00、01、10、11 这 4 个地址,它们分别位于输出端 Z、Y、X、W,通过地址线表示的二进制数就可以找到输出端中的不同地址(以后就可以对其进行读写操作了)
也可以这样理解:输入端 A、B 相当于两个开关,输出端 Z、Y、X、W 相当于 4 个灯泡,两个开关的不同状态的组合就可以控制其中 1 个灯泡中的亮灭。
接下来分析单一输入端:
当输入端A 为 1 时,会选出输出端X、输出端W;
当输入端A 为 0 时(经过非门会变成 1),会选出输出端Z、输出端Y;
结论:不管输入端A 是 0 还是 1,都会选出一半
当输入端B 为 1 时,会选出输出端W、输出端Y;
当输入端B 为 0 时(经过非门会变成 1),会选出输出端X、输出端Z;
结论:不管输入端 B 是 0 还是 1,都会选出一半
由于只有当与门同时为 1 时,输出端才会输出 1。
现在,当输入端A和输入端B分别为 0、1 时,输出端Y就是输入端A、B 共同选出的地址。
上图的红线为 1(输入端A 的 0 经过非门会将其之后的线路置为 1)
那它的时间复杂度是怎么样的呢?
由于输入端A、输入端B(比如地址 01)是同时输入的,所以电路会进行并行的二分查找,一个输入端的一次二分查找是 O(1),所有的输入端并行,进行一次二分查找同样是 O(1)。
以上是 2 bit 寻址,更多 bit 的寻址同样是并行进行的,所以时间复杂度同样是 O(1)。
寻址的物理本质是并行二分查找,而数组索引就是在寻址,所以这就是为什么数组的时间复杂度是 O(1) 的原因。
下图是 3 bit 寻址逻辑电路
可以看到有 3 个输入端、8 个输出端。因为 3 bit 地址线的寻址空间大小是 \( 2^3=8 \)。输入端越多,可以寻找的地址空间也就越大。
当输入端有 32 bit 时,可以寻找的地址空间有 \( 2^{32}=4294967296 \) 个,它对应的内存空间是 4 GB,这也就是为什么 32 位系统支持的最大内存是 4 GB 的原因了。
64 位系统的寻址空间大小是 16 EB
1 EB = 1024 PB
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。