memory - 根据地址位长和内存单元内容计算内存大小

标签 memory cpu-architecture memory-address

我试图计算最大内存大小,知道地址的位长和内存单元的大小。

我的理解是,如果地址是 n 位,则有 2^n 个内存位置。但是要计算机器的实际内存大小,您需要将地址数乘以内存单元的大小。那是对的吗?

换一种方式,

步骤1:以位为单位计算地址的长度(n位)
第二步:计算内存位置的数量 2^n(bits)
第 3 步:将内存位置的数量乘以内存单元的字节大小。

例如,如果每个单元格是 2 个字节,我是否会将 2^n 位(地址长度)乘以每个存储单元的 2 个字节。

那么总内存将是 2^n 位(地址大小)* x 字节(单元格大小)?

最佳答案

"actual memory size of the machine"



我在这里假设您指的是所讨论机器的物理地址空间,忽略虚拟寻址等。
大多数现代机器都是字节可寻址的(8 位),这意味着每个地址指 1 个字节。在这种情况下,假设您有一个具有匹配 n 位地址总线的 n 位处理器(有些情况下它们不相同,例如奔腾处理器),可能的内存位置数量是 2^n 字节。

如果您有更专业的硬件(嵌入式微 Controller 等),可以按字寻址(16 位、32 位),那么您将乘以 2^n *(以位为单位的字长)/(8) 是正确的= # 字节数。

话虽如此,当您考虑可能与处理器地址线不同的虚拟寻址和物理总线大小时,您必须查看该特定机器的“理论限制”。

关于memory - 根据地址位长和内存单元内容计算内存大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47187340/

相关文章:

c++ - 动态分配的指针数组中的悬挂指针

c++ - 了解 VirtualAlloc 中的基地址

x86 - 内存屏障的传递性/累积性属性是如何在微架构上实现的?

c++ - 为指令集模拟器设计高效内存

c# - 如何确定变量是增加还是减少/动态检测变化

c++ - 如何使用 boost 日志防止内存增长?

linux - 为什么64位cpu不存在high-memory?

assembly - GNU GAS 汇编中是否有代表当前地址的符号?

c# - 读取所有进程内存以查找字符串变量的地址 c#

c - 如何获取指向动态库(Linux ELF)特定部分的指针?