小编Tan*_* H.的帖子

字符串在x64中占用多少字节?

出于学习的目的,我试图理解C#字符串是如何内部存储在内存中的.

根据这篇博客文章,C#字符串大小是(x64与.NET framework 4.0):

26 + 2 * length
Run Code Online (Sandbox Code Playgroud)

带有单个字符的字符串(26 + 2 * 1) / 8 * 8 = 32 bytes.这确实与我测量的相似.

让我感到困惑的是26字节的开销.

我运行了以下代码并检查了内存:

string abc = "abcdeg";
string aaa = "x";
string ccc = "zzzzz";
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

AFAIK这些块如下:

  • 绿色:同步块(8个字节)
  • 青色:类型信息(8字节)
  • 黄色:长度(4个字节)
  • 粉红色:实际字符:每个字符2个字节+ 2个字节,用于NULL终止符.

看看"x"字符串.它确实是32个字节(按计算).

无论如何,如果用零填充,它看起来像字符串的结尾."x"字符串可能在NULL终止符的两个字节之后结束,并且仍然是内存对齐的(因此是24字节).为什么我们需要额外的8个字节?

我已经尝试了与其他(更大)字符串大小相似的结果.它看起来总是有8个字节.

c# memory string clr

8
推荐指数
1
解决办法
238
查看次数

如果Any*.File Exists,则全部删除*.File

我在winforms应用程序中使用visual c#.我想查看是否*.plr存在,删除所有带扩展名的文件.plr.我很困惑,因为以下代码由于某种原因不起作用.

if (File.Exists("*.plr"))
{
    File.Delete("*.plr");
}
Run Code Online (Sandbox Code Playgroud)

c# winforms visual-studio-2015

0
推荐指数
1
解决办法
100
查看次数

标签 统计

c# ×2

clr ×1

memory ×1

string ×1

visual-studio-2015 ×1

winforms ×1