【问题标题】:How C stores different data types in the memory? [duplicate]C如何在内存中存储不同的数据类型? [复制]
【发布时间】:2016-05-13 02:12:34
【问题描述】:

我正在学习汇编(用于 MIPS),我知道每个内存调用都会带来一个 32 位字。我也知道在 C 中有些数据类型不需要 32 位。例如,一个 char 只需要 8 位内存和一个 int 16 位。所以我的问题是 C 中的字符在内存中使用 32 位吗?还是只有 8 位?如果 CPU 从内存中加载一个包含字符的地址,它只有 8 位,它不会收到一个 32 位的字吗?我对此有点困惑,因为我总是被告知所有内容都以 32 位字的形式存储在内存中。

一方面,将字符存储在 8 位块上是有意义的,这样可以节省空间。

【问题讨论】:

  • “我正在学习汇编(针对 MIPS),我知道每个内存调用都会带来一个 32 位字。” - 不,它没有。 MIPS 有 lb 和 sb 用于 8 位,lh 和 sh 用于 16 位。

标签: c memory assembly


【解决方案1】:

你被误导了。 MIPS 是一个字节可寻址的 CPU,因此内存的每个“单元”仅保存 8 位。每条读取(或写入)指令一次可以访问 1、2 或 4 个字节以访问 8、16 或 32 位(在 MIPS32 上——使用 MIPS64,您还可以在一次读取中访问 8 个字节/64 位或写)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-04
    • 2015-06-28
    • 2021-12-15
    相关资源
    最近更新 更多