gpt4 book ai didi

c# - 当 RAM 在 C# 中结束时会发生什么?

转载 作者:太空狗 更新时间:2023-10-29 20:53:25 26 4
gpt4 key购买 nike

我不是计算机专家,所以让我尝试更具体地提出这个问题:

我做一些科学计算,计算有时需要大量内存来存储它们的结果。几天前,我的输出文件占用了 4 GB 的硬盘空间,但我有这个数量的 RAM。所以:

  • 当您正在运行的程序分配的内存多于计算机中可用的内存时,CLR(或其他东西?)如何处理内存?它会在 HD 中创建一些交换吗? (我知道这会减慢我的程序,但我只对内存问题感兴趣)
  • 是否依赖于操作系统,比如我是在 Linux 上使用 MONO 还是在 Windows 上使用 VS?

提前致谢!

最佳答案

我认为有帮助的思考方式是:内存 是磁盘空间。 RAM 是一种快速缓存。我不会想“当我没有 RAM 时,系统会将其交换到磁盘”,而是“当我有可用 RAM 时,系统会将我的磁盘内存移入其中”。

这与大多数人的想法相反,但我发现它有帮助。 RAM只是一种性能优化;您可以分配多少内存的真正限制是可用磁盘空间。

当然比这更复杂。在 32 位操作系统上,每个进程都有一个 20 亿字节的用户地址空间。 (内核地址空间也是如此,但让我们忽略它。)您可以访问的每一页内存,无论是在 RAM 中还是在磁盘上,都必须在该地址空间中。您可以分配超过 20 亿字节,没问题。但是您一次只能处理 2 GB。如果分配了 10 GB,则至少有 8GB 不会映射到地址空间。在那种情况下,您必须取消映射其他内容,然后将您想要的内容映射到地址空间中才能获取它。

此外,很多东西需要在连续地址空间中。例如,如果您有一个 1MB 的堆栈,那么地址空间中就需要有一百万个 连续 字节可用。

当人们“内存不足”时,他们并不是内存不足;而是内存不足。 RAM 只是磁盘上的快速缓存。而且它们没有用完磁盘空间;有很多这样的。他们几乎总是处于连续地址空间不足以满足需求的情况。

CLR 内存管理器不会为您实现这些花哨的映射和取消映射策略;基本上,您将获得 2GB 地址空间,仅此而已。如果您想做一些奇特的事情,比如内存映射文件,您可以自己编写代码来管理内存。

关于c# - 当 RAM 在 C# 中结束时会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6002129/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com