>但是RAM甚至支持这个吗?
>它是如何建立起来的?
>它可以利用bool只有1个字节并将其存储在一个小的“寄存器”中吗?@H_502_5@
解决方法
当然,您经常需要与原始字大小不同的大小.机器指令和智能编码允许您通过应用各种位级逻辑运算符将这些单词分解为更小的单位,或通过“组合”多个单词将它们组合成更大的单位.@H_502_5@
例如,如果你有一个32位字,你可以对像0xff0000ff这样的模式使用AND一个字来获取该字中的第一个和最后一个字节,或者使用0x0000ffff来获得第二个16位int的内容.@H_502_5@
在bool的情况下,通常使用内存作为位图.你基本上可以将X“bools”放在一个X位字中,并通过ANDing或ORing来访问一个特定的位来对着一个引用那个bool的“mask”.例如,第一位为1,第二位为2,第四位为4,等等.@H_502_5@
在大多数机器中,不建议在两个单词之间分割较小的数据类型(这称为alighment).@H_502_5@
当您使用更高级别的语言(如C或C)时,通常不必担心所有这些内存组织的内容.如果分配int,short和double,编译器将生成相应的机器代码.只有在想要在动态分配的内存中巧妙地组织内容时才能直接执行此操作,例如在手动实现位图时.@H_502_5@
使用比本机字大小更大的单元时,编译器将再次为您处理大多数事情.例如,在32位机器上,您可以轻松处理32位int操作,但是要在8位机器或16位机器上运行相同的代码,编译器将生成代码以执行较小的操作并将它们组合在一起得到结果.这部分原因通常被认为是建议在64位计算机上运行64位操作系统,因为否则您可能会执行多个指令和读/写操作来在32位操作系统上模拟64位而不是单个操作系统指令或内存访问.@H_502_5@