【发布时间】:2020-04-19 08:21:47
【问题描述】:
Visual Studio 内存分析器对我来说没有意义,我正在查看一个双字符串数组 [10,1000] 并试图弄清楚内存是如何分配给它的。
- “e96”字符串如何占用 20 个字节?不应该是:长度成员(int大小)+字符串长度*字符大小?所以在这种情况下 4 + 3*2 = 10 个字节
我的计算是基于 sizeof 字符串问题和 Majid 回答 here
- 下面的快照已排序,因此数组中的最小字符串大小为 20 字节,总大小 = 40KB 怎么算?它应该是 > 10,000 * 20
我错过了什么?
代码可以找到here
string[,] mat = GetData(); // memory allocation is done here.
【问题讨论】:
-
您对 1 的解释是 奇怪(20 似乎对我来说是正确的)...您在发布之前检查过有关该主题的任何文章吗?提供这样的链接将有助于了解您的想法来自哪里。还显示产生该结果的代码会有所帮助...(我假设您已经看到类似 stackoverflow.com/questions/26998758/… 的内容)
-
您的数组中的字符串可能指向实习字符串(您是否通过分配“e96”来设置数组的所有元素?)
-
不,数组由不同长度的随机字符串填充
-
一个字符是一个类,所以类中有标题信息。该类还包含一个私有属性来指示 char 是一个字节还是两个字节。
-
@jdweng C# char 是一个结构体,总是两个字节
标签: c# string memory allocation