加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 18:33:16 所属栏目:百科 来源:网络整理
导读:我不是计算机专家,所以让我试着更具体地提出这个问题: 我做了一些科学计算,计算有时需要大量内存来存储结果.几天前,我的输出文件占用了4 GB的硬盘,但我有这么多的RAM.所以: 当您运行的程序分配的内存多于计算机中可用的内存时,CLR(或其他内容?)如何处理内
我不是计算机专家,所以让我试着更具体地提出这个问题:

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

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

提前致谢!

解决方法

我觉得有用的方法是:内存是磁盘空间. RAM是一种快速缓存.而不是想“当我没有RAM时,系统会将它交换到磁盘”,我认为“当我有可用的RAM时,系统会将我的磁盘存储器移入其中”.

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

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

而且,很多东西需要在连续的地址空间中.例如,如果你有一个1MB的堆栈,那么地址空间中需要有一百万个连续的字节.

当人们“内存不足”时,他们没有耗尽内存; RAM只是磁盘上的快速缓存.它们没有耗尽磁盘空间;有很多.它们几乎总是处于没有足够的连续地址空间来满足需求的情况下.

CLR内存管理器不会为您实现这些花哨的map-and-unmap策略;基本上,你得到2GB的地址空间,就是这样.如果你想做一些花哨的事情,比如内存映射文件,你可以自己编写代码来管理内存.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读