内存中的内存存储和访问?

时间:2017-07-28 09:12:25

标签: c memory

如果我将数据存储在char中,例如:

char a = 'a'; 

然后它将存储在1字节的内存中,根据我的知识,计算机访问内存为2的倍数,如果我们使用结构,它将进行结构填充,但在正常情况下将如何处理数据,例如:这里如果char a将存储在位置1000中,那么下一个字节将保持未使用状态还是什么?因为计算机无法访问1001(不是2的倍数)请澄清疑问。

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的变量,如intdouble,通常会按地址分配,甚至可按其大小分割。这可能会缩短加载时间或缓存使用量。在某些处理器上甚至是必需的,但不是全部。

就像你提到的结构的填充一样,以类似的方式对齐存储在结构中的变量而不是是一个优点。但这完全取决于编译器。

一些短暂的值甚至可能保存在CPU寄存器中,永远不会存储到内存中。