在64位平台上,使用8字节长度前缀似乎是合理的。如果我们可以寻址超过4GB的内存,为什么不允许5GB的字符串呢?答案只是"按规范",还是有一些我不知道的互操作性/向后兼容性原因吗? 谢谢。
在64位平台上,使用8字节长度前缀似乎是合理的。如果我们可以寻址超过4GB的内存,为什么不允许5GB的字符串呢?答案只是"按规范",还是有一些我不知道的互操作性/向后兼容性原因吗? 谢谢。
BSTR
数据类型是标准的COM字符串数据类型。改变长度前缀将使得在不同位数进程之间安全地移动字符串变得不可能(或者至少会使其变得更加复杂)。由于COM是唯一相关的跨位数Interop基础设施,因此需要让BSTR
在32位进程和64位进程中表现出相同的行为。一个好的理由是为了与平台API(如MultiByteToWideChar
)兼容,该API接受int
长度。还有许多使用32位长度的字符串API。
这实际上不是一个真正的限制,因为我无法想象一个长度大于2GB的BSTR
是解决问题的最佳方案。
BSTR
的布局都是有文档记录的。自定义和系统提供的编组程序都依赖于这个记录的布局:一个指向数据字符串的指针,紧随其后的是内存中的4字节长度前缀。考虑一个针对在共享内存中保持其状态的对象的优化编组程序。如果该内存映射到两个进程中,则不能为不同位数的BSTR
使用不同的内存布局。 - IInspectable