【问题标题】:Confused on how memory is allocated对如何分配内存感到困惑
【发布时间】:2021-11-16 14:49:00
【问题描述】:

我正在观看关于指针和内存的video,我很困惑,因为我认为内存地址是 1 字节,但在视频中他说它们是 32 位(4 字节),如果我们有 @987654322 @ 它将被存储在一个内存地址中,但一个整数不会存储在 4 个单独的内存地址中,因为它们最大为 4 个字节长?

【问题讨论】:

  • 视频特别说他在简化,假装地址指向32位数据。
  • @DavidRanieri 我的意思是存储在内存地址的数据是一个字节
  • 首先,您将地址与数据大小混为一谈。在所有普通计算机上,每个地址存储的项目都是 1 字节大。然而,地址本身可以是 16、32 或 64 位长,具体取决于系统的地址总线宽度。更大的数据类型当然可以跨多个字节分配,但这与内存地址没有任何关系。另外,请停止观看蹩脚的 youtube 视频,而改为读书。任何随机的人都可以制作 youtube 视频,但出版商不会让任何随机的人出版一本书,因此内容质量差异很大。
  • @Lundin 什么书

标签: c pointers memory-address


【解决方案1】:

指针指向单个字节。当您存储大于一个字节的内容时,它会分布在多个连续的字节中,并且指针指向这些字节中的第一个。编译后的代码使用可以从内存读取和写入多个字节的指令来处理整个事情。

所以你是对的,一个 32 位整数将存储在 4 个独立(但连续)的内存位置。

这就是我们必须在 C 中声明指针类型的原因。当您取消引用指针时,类型用于确定从该地址开始读取或写入多少字节。

【讨论】:

  • 所以在 32 位系统上,有 2^32 个不同的可寻址内存地址(理论上,但我假设有些是操作系统本身保留的)每个存储一个字节,这就是为什么 32位操作系统仅限于使用 4GB 的 RAM,因为 CPU 可以寻址的内存地址只有那么多?
  • 是的,没错。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-02
  • 1970-01-01
  • 2013-12-25
  • 1970-01-01
  • 2013-10-28
  • 2012-09-18
相关资源
最近更新 更多