2017-02-12 127 views
0

如果UTF-32被限制为需要21位的17个平面(1114111个char点)的UCS-4,那么第四个字节在做什么?为什么UTF-32使用四个字节?

+0

直言不讳:因为它可以,并且在大多数计算机中使用32位值很容易。 –

回答

1

第四个字节就是坐在那里占据空间(用0填充)。

理论上,可以设计一个21位或24位的交换格式。实际上,这些都很尴尬。很少(如果有的话)现代计算机具有21位或24位数据类型。由于32位字很容易处理,因此使用它们来存储最大值远远小于2的数字数据类型是相当普遍的。

+0

我知道在某些平台上可能难以实现位对齐的数字,但4B数据类型如何比3B数据类型更容易使用? sizeof char32_t可以是3,int32_t应该用来存储大的整数,否? –

+0

(字符是整数)。假设它是3个字节(所以它真的是char24_t :))。其对齐要求是什么? 3不是一个有效的答案;没有硬件具有3字节对齐。但是如果它的对齐方式是2或4,那么你如何安排它们的矢量以便它们全部对齐?如果对齐方式为1,那么硬件上会发生哪些不能进行未对齐的加载?硬件往往不具有3字节的负载。如果char24_t占用页面的最后三个字节,并且下一页在访问时会出现页面错误,那么如何将char24_t放入寄存器? – rici

+0

FWIE内存对齐由SSE指令在单个周期中用于多个数字操作。字符串没有这种需要,只能用于顺序或随机访问R/W。对齐的负载可能会稍微加快一点,我可以看到它的好处,即在标记短字符串时(以25%的内存价格)。但是,是的,这是一个原因。 –

相关问题