c – RAM可以处理不同的数据类型吗?

前端之家收集整理的这篇文章主要介绍了c – RAM可以处理不同的数据类型吗?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
int,char和bool通常有不同的大小.其中int> char> bool,我想.

>但是RAM甚至支持这个吗?
>它是如何建立起来的?
>它可以利用bool只有1个字节并将其存储在一个小的“寄存器”中吗?

解决方法

计算机存储器被组织成“字”,即给定大小的字节序列(通常是2个幂).通常通过这些单元读取和写入存储器,这些单元通常与寄存器的大小和cpu对算术运算符的本机支持兼容.这通常是机器的“比特额定值”的来源(例如,32位cpu,64位cpu,旧的8位视频游戏控制台).

当然,您经常需要与原始字大小不同的大小.机器指令和智能编码允许您通过应用各种位级逻辑运算符将这些单词分解为更小的单位,或通过“组合”多个单词将它们组合成更大的单位.

例如,如果你有一个32位字,你可以对像0xff0000ff这样的模式使用AND一个字来获取该字中的第一个和最后一个字节,或者使用0x0000ffff来获得第二个16位int的内容.

在bool的情况下,通常使用内存作为位图.你基本上可以将X“bools”放在一个X位字中,并通过ANDing或ORing来访问一个特定的位来对着一个引用那个bool的“mask”.例如,第一位为1,第二位为2,第四位为4,等等.

在大多数机器中,不建议在两个单词之间分割较小的数据类型(这称为alighment).

当您使用更高级别的语言(如C或C)时,通常不必担心所有这些内存组织的内容.如果分配int,short和double,编译器将生成相应的机器代码.只有在想要在动态分配的内存中巧妙地组织内容时才能直接执行此操作,例如在手动实现位图时.

使用比本机字大小更大的单元时,编译器将再次为您处理大多数事情.例如,在32位机器上,您可以轻松处理32位int操作,但是要在8位机器或16位机器上运行相同的代码,编译器将生成代码以执行较小的操作并将它们组合在一起得到结果.这部分原因通常被认为是建议在64位计算机上运行64位操作系统,因为否则您可能会执行多个指令和读/写操作来在32位操作系统上模拟64位而不是单个操作系统指令或内存访问.

猜你在找的C&C++相关文章