【问题标题】:How are things stored in memory事物是如何存储在内存中的
【发布时间】:2020-04-24 16:26:54
【问题描述】:

我刚开始学习 C,我了解到内存的每个字节都有一个地址。

我的问题是,占用 2 个字节内存的整数的地址是什么?

如果我们有一些需要 9 位内存的数据怎么办?我认为内存是一长块大小为 1 字节的带有地址的盒子。 9 位占据一个盒子和下一个盒子的 1/9,盒子剩下的 8/9 怎么办?

【问题讨论】:

  • 仅供参考,一个字节中有 8 位。
  • 如果你说的是字面整数,没有地址,它们是指令本身代码的一部分
  • @ChristopherMoore 这并不完全正确,它只是最常见的字节大小
  • 如果你有一个 9 位的位域并且你有一个 8 位的字节存储器,那么你的位域将使用 2 个字节。可能会使用其他 7 位,这一切都取决于上下文以及编译器用于减小大小等的选项。无论如何,数据的地址是其第一个字节的地址,其可以是更高或更低的字节,具体取决于大/小印度人
  • 对您的问题的简短回答是,任何特定数据的地址都是数据在内存中开始的基地址。分配的“盒子”的数量取决于平台和正在创建的数据的大小。在您的示例中,为 9 位。系统将分配至少保存 2 个字节所需的内存。例如,我在一个分配了最少 32 位内存块的 Analog Devices DSP 上工作。 char ch; 将被分配 32 位。 int i; 也将获得 32 位。

标签: c computer-science


【解决方案1】:

2018 C 标准在 6.2.6.1 2 中说:

除了位域,对象由一个或多个字节的连续序列组成,数字, 顺序和编码是明确指定的 [在 C 标准中] 或实现定义的。

该标准允许使用位域实现灵活性。通常,连续的位域可能共享部分字节,或者实现可能将它们分开并留下一些未使用的位。

在 C 中获取对象的地址会产生一个指针。 C 中的指针指向整个对象;当然,除了本身是单字节的对象之外,它们指向哪个字节没有区别。当指针转换为指向字符类型的指针时,结果是指向对象中最低寻址字节的指针(根据 6.3.2.3 7)。但是,这并不意味着原来的指针就是用那个地址来表示的。

【讨论】:

  • 好的和正确的答案,也许这个问题太深了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-05-28
  • 2012-12-15
  • 2012-07-03
  • 1970-01-01
  • 2018-10-04
  • 1970-01-01
相关资源
最近更新 更多