为什么在64位平台上BSTR长度前缀为4个字节?

似乎在64位平台上,有一个8字节长度的前缀是合理的。 如果我们可以解决超过4Gb的内存,为什么不允许,比如5Gb字符串? 答案只是“按规范”还是存在一些我不知道的互操作性/向后兼容性原因? 谢谢。

BSTR数据类型是标准COM字符串数据类型。 更改长度前缀将使得无法在不同位数的进程之间安全地移动字符串(或者至少使其更加复杂)。 由于COM是唯一相关的跨位互操作基础结构,因此必须使BSTR对32位进程和64位进程的行为方式相同。

这是一个权衡,强加2GB的“限制”以换取在不同位数的进程之间无障碍地编组字符串。

一个很好的理由是兼容平台API,如MultiByteToWideChar ,它接受int长度。 还有许多字符串API可以使用32位长度。

这实际上并不是一个真正的限制,因为我无法想象长度> 2GB的BSTR将是问题的最佳解决方案。

http://msdn.microsoft.com/en-us/library/windows/desktop/ms221069%28v=vs.85%29.aspx

BSTR是前缀长度字符串,因此第一个属性是length,而不是address

大多数64位编译器实现使用LP64(Linux / Unix)或LLP64(Windows),因此int的长度保持为32位

另一个原因可能是向后兼容