什么时候在堆栈上分配固定大小的数组?

发布于 2024-11-08 19:35:52 字数 451 浏览 6 评论 0原文

我有以下方法将字节从套接字流复制到磁盘:

 public static void CopyStream(Stream input, Stream output)
 {
    // Insert null checking here for production
    byte[] buffer = new byte[8192];
    int bytesRead;
    while ((bytesRead = input.Read(buffer, 0, buffer.Length)) > 0)
    {
        output.Write(buffer, 0, bytesRead);
    }
}

我很好奇的是:缓冲区将分配在堆栈上还是在堆栈上 堆?可以肯定的是,我可以使这个方法不安全,并将 fixed 关键字添加到 变量声明,但如果不需要的话我不想这样做。

I have the following method to copy bytes from a socket stream to disk:

 public static void CopyStream(Stream input, Stream output)
 {
    // Insert null checking here for production
    byte[] buffer = new byte[8192];
    int bytesRead;
    while ((bytesRead = input.Read(buffer, 0, buffer.Length)) > 0)
    {
        output.Write(buffer, 0, bytesRead);
    }
}

What I am curious about is: will buffer be allocated on the stack or on the
heap? To be sure, I could make this method unsafe, and add the fixed keyword to
the variable declaration, but I don't want to do that ifn I don't have to.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

独守阴晴ぅ圆缺 2024-11-15 19:35:52

buffer 变量将在堆栈上分配,buffer 变量保存的 8192 字节内存将在堆上。

你为什么谈论固定?你想加快速度吗?几乎肯定不会……

引用埃里克·利珀特的话:

“但是在绝大多数程序中
在那里,局部变量分配
并且解除分配不会
性能瓶颈。 ”

参考< /a>.

The buffer variable will be allocated on the stack, the 8192 byte memory the buffer variable holds the location of will be on the heap.

why are you talking about fixed? Are you trying to speed things up? It almost certainly won't...

To quote Eric Lippert:

"But in the vast majority of programs
out there, local variable allocations
and deallocations are not going to be
the performance bottleneck. "

Ref.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文