为什么C#/ .net字符串长度为前缀且空终止?

pro*_*ick 18 .net c# string bstr null-terminated

在阅读了什么是空终止字符串的基本原理?我发现在C#/.中,一些类似的问题在内部,Net字符串都是长度前缀和null终止,就像在BSTR数据类型中一样.

字符串是长度前缀还是空终止而不是例如的原因是什么.只有长度 - 前缀?

jas*_*son 21

长度为前缀,以便计算长度O(1).

Null终止以使编组快速无管理(非托管可能需要以空字符结尾的字符串).


Xai*_*oft 13

以下是Jon Skeet 关于字符串的Blog Post的摘录:

虽然就API而言字符串不是以空值终止的,但字符数组是以空值终止的,因为这意味着它可以直接传递给非托管函数而不涉及任何复制,假设inter-op指定了字符串应该作为Unicode编组.