如果UTF-32被限制为需要21位的17个平面(1114111个char点)的UCS-4,那么第四个字节在做什么?为什么UTF-32使用四个字节?
回答
第四个字节就是坐在那里占据空间(用0填充)。
理论上,可以设计一个21位或24位的交换格式。实际上,这些都很尴尬。很少(如果有的话)现代计算机具有21位或24位数据类型。由于32位字很容易处理,因此使用它们来存储最大值远远小于2的数字数据类型是相当普遍的。
我知道在某些平台上可能难以实现位对齐的数字,但4B数据类型如何比3B数据类型更容易使用? sizeof char32_t可以是3,int32_t应该用来存储大的整数,否? –
(字符是整数)。假设它是3个字节(所以它真的是char24_t :))。其对齐要求是什么? 3不是一个有效的答案;没有硬件具有3字节对齐。但是如果它的对齐方式是2或4,那么你如何安排它们的矢量以便它们全部对齐?如果对齐方式为1,那么硬件上会发生哪些不能进行未对齐的加载?硬件往往不具有3字节的负载。如果char24_t占用页面的最后三个字节,并且下一页在访问时会出现页面错误,那么如何将char24_t放入寄存器? – rici
FWIE内存对齐由SSE指令在单个周期中用于多个数字操作。字符串没有这种需要,只能用于顺序或随机访问R/W。对齐的负载可能会稍微加快一点,我可以看到它的好处,即在标记短字符串时(以25%的内存价格)。但是,是的,这是一个原因。 –
- 1. 为什么mode_t使用4个字节?
- 2. 四个字节中的四个整数?
- 3. 使用C++将四个字节转换为整数
- 4. 为什么sizeof(13.33)是8个字节?
- 5. Octlet,四字还是什么?
- 6. 为什么只有四个寄存器?
- 7. 为什么ToBase64String将16个字节的字符串更改为24个字节
- 8. 四个1字节字符到一个4字节int?
- 9. 为什么Kotlin字节码引用java.util.function.BiConsumer?
- 10. 属性数据为什么是第四个字段1
- 11. 什么是JSON八位字节,为什么需要两个?
- 12. 向四字节的字节向量
- 13. 从GUID的前四个字节获取Int32的最佳方法是什么?
- 14. 为什么我们为每个变量分配12个字节?
- 15. 为什么UTF-8使用多个字节来表示某些字符?
- 16. UTF32 for WebClient.UploadValues?
- 17. 为什么sizeof()返回4个字节而不是2个字节的short int?
- 18. 为什么Java char原语占用2个字节的内存?
- 19. pcap为什么总是8个字节的数据包...为什么?
- 20. 为什么要避免使用多字节流在Java中
- 21. 结合四个字节并转换为浮点数
- 22. 为什么DrawText只打印我的字符串的前四个字符?
- 23. 为什么sizeof字符常量是4个字节?
- 24. 为什么java中的字符大小是2个字节?
- 25. 为什么字段分隔符必须只有一个字节?
- 26. 为什么I2C_SMBUS_BLOCK_MAX限制为32个字节?
- 27. System.IO.UnmanagedMemoryStream - 为什么字节*代替IntPtr
- 28. R 2.14字节编译 - 为什么不?
- 29. 为什么字节不相交?
- 30. 为什么1字节等于8位?
直言不讳:因为它可以,并且在大多数计算机中使用32位值很容易。 –