如果我将数据存储在char中,例如:
char a = 'a';
然后它将存储在1字节的内存中,根据我的知识,计算机访问内存为2的倍数,如果我们使用结构,它将进行结构填充,但在正常情况下将如何处理数据,例如:这里如果char a
将存储在位置1000中,那么下一个字节将保持未使用状态还是什么?因为计算机无法访问1001(不是2的倍数)请澄清疑问。
答案 0 :(得分:0)
Binary ,而不是“2的倍数”。
内存中的地址<input placeholder="Sup">
<br />
<p style="display:inline-block">This is the first line.</br> Check it out</p>
将为二进制(32位)= 1000
内存中的地址00000000 00000000 00000011 11101000
将为二进制(32位)= 1001
另外,我认为以十进制来考虑地址记忆是错误的。
此处 RAM Adressing definition from Wikipedia :
寻址
为了有用,存储器单元必须是可读和可写的。内 RAM器件,多路复用和多路分解电路用于 选择存储单元。通常,RAM设备具有一组地址 线A0 ... An,以及可应用的每个位组合 在这些行中,激活一组存储器单元。由于此 寻址,RAM设备几乎总是具有内存容量 是两个人的力量。
通常,几个存储器单元共享相同的地址。例如,一个4 位“宽”RAM芯片每个地址有4个存储单元。通常是 存储器的宽度和微处理器的宽度是不同的 一个32位微处理器,需要8个4位RAM芯片。
通常需要比设备提供的地址更多的地址。在 在这种情况下,设备的外部多路复用器用于激活 正在访问的正确设备。
答案 1 :(得分:0)
C语言并没有说明变量如何存储在内存中。这取决于单个编译器,使用它对目标系统的了解。
某些处理器可以从内存中的任何字节读取,例如原始PC中的8088具有8位数据总线,因此无论如何都必须一次读写一个字节。它的x86处理器的后继者仍然可以做到这一点。
所以,如果你存储
char a = 'a';
在地址1000处,其他一些char
很可能存储在地址1001(如果编译器更喜欢,则为999)。
大于char
的变量,如int
或double
,通常会按地址分配,甚至可按其大小分割。这可能会缩短加载时间或缓存使用量。在某些处理器上甚至是必需的,但不是全部。
就像你提到的结构的填充一样,以类似的方式对齐存储在结构中的变量而不是是一个优点。但这完全取决于编译器。
一些短暂的值甚至可能保存在CPU寄存器中,永远不会存储到内存中。