Memory 大小小于1字节的内置数据类型

Memory 大小小于1字节的内置数据类型,memory,programming-languages,bit-manipulation,Memory,Programming Languages,Bit Manipulation,大多数强类型编程语言的数据类型大小至少为1字节。我知道可以使用位屏蔽访问单个内存单元,但为什么编程语言不支持小于1字节的数据类型?对于完全具有手动内存管理/地址转换功能的语言,硬件对这些功能规定了一些限制。很少有体系结构(如果有的话)支持寻址单个位。通常,最小的存储单元是一个字节,所以他们使用这个字节 让所有地址都引用位要么需要比平均值更大的地址表示(性能损失——任何涉及地址的指令数量都是平均值的两倍),要么极大地限制了可用的地址空间。添加一个特殊的大小写(和特殊类型的地址)会使语言变得复杂,因

大多数强类型编程语言的数据类型大小至少为1字节。我知道可以使用位屏蔽访问单个内存单元,但为什么编程语言不支持小于1字节的数据类型?

对于完全具有手动内存管理/地址转换功能的语言,硬件对这些功能规定了一些限制。很少有体系结构(如果有的话)支持寻址单个位。通常,最小的存储单元是一个字节,所以他们使用这个字节

让所有地址都引用位要么需要比平均值更大的地址表示(性能损失——任何涉及地址的指令数量都是平均值的两倍),要么极大地限制了可用的地址空间。添加一个特殊的大小写(和特殊类型的地址)会使语言变得复杂,因为很少需要(注意C有一个相关但更通用的版本:结构中的位字段-结构仍然有一个
sizeof
,以字节为单位,但是一个有8个成员的结构总的来说可能是一个字节大)。无论如何都包含的位篡改操作符允许在用户代码中模拟它


在根本没有寻址概念的高级语言中,大小是一个实现细节。当然(直接或间接地)实现同样是在较低级别的语言中,默认为字节大于位。这以及其他要求和限制(例如,需要通过指针访问对象)使得公开“使用机器字,然后通过移位/屏蔽对位进行索引”之类的技巧通常是不切实际的(例如,尽管存在)对于具有手动内存管理/地址转换功能的语言,硬件对这些功能规定了一些限制。很少有体系结构(如果有的话)支持寻址单个位。通常,最小的存储单元是一个字节,所以他们使用这个字节

让所有地址都引用位要么需要比平均值更大的地址表示(性能损失——任何涉及地址的指令数量都是平均值的两倍),要么极大地限制了可用的地址空间。添加一个特殊的大小写(和特殊类型的地址)会使语言变得复杂,因为很少需要(注意C有一个相关但更通用的版本:结构中的位字段-结构仍然有一个
sizeof
,以字节为单位,但是一个有8个成员的结构总的来说可能是一个字节大)。无论如何都包含的位篡改操作符允许在用户代码中模拟它


在根本没有寻址概念的高级语言中,大小是一个实现细节。当然(直接或间接地)实现同样是在较低级别的语言中,默认为字节大于位。这以及其他要求和限制(例如,需要通过指针访问对象),使得将“使用机器字,然后通过移位/掩蔽对位进行索引”之类的技巧暴露到所实现的语言中通常是不切实际的(例如,尽管存在),还将使与MAR 8x连接的解码器体积庞大而无显著优势+将寻址空间缩减8倍有意义,还将使与MAR 8x连接的解码器体积庞大而无显著优势+将寻址空间缩减8倍