c - C如何在内存中存储不同的数据类型?

标签 c memory assembly

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

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

最佳答案

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

关于c - C如何在内存中存储不同的数据类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37200181/

相关文章:

c - 用C写的小程序

C 预处理器 - 家庭作业

java - 内存不足错误 - 可能是由于内存泄漏?

assembly - 试图获取当前运行的 .COM 程序的名称。它存储在哪里?

assembly - 为什么我的引导加载程序不能正确地从内存中加载一个字节?

c - 如何使用 cmocka 库模拟无法修改的第三方库中的函数?

c - 测试 shellcode

c++ - 访问外部进程的内存

java - Android 静态类 vs 非静态类内存性能

assembly - 访问损坏的共享库