我可以在32位系统上分配大于4GB的对象吗?

本文关键字:4GB 对象 大于 分配 32位 系统 我可以 | 更新日期: 2023-09-27 18:01:33

假设没有运行时或操作系统限制。我可以分配一个比虚拟地址空间大的对象吗?

我可以在32位系统上分配大于4GB的对象吗?

我想在这个奇怪的问题中找到一个真正的问题。这些问题怎么样?

假设有足够的虚拟内存空间可用,在。net中对象的大小是否有理论上的限制?

是的。无论操作系统如何,运行时都不允许单个托管对象大于2 GB。

在Windows中分配大于虚拟内存空间的内存块是合法的吗?

是的。人们经常对这个事实感到惊讶,但请记住,虚拟内存被称为虚拟内存是有原因的;这不是真正的内存。

实际内存为磁盘空间。

内存不是RAM——它只是一个位于磁盘空间之上的快速、方便的缓存。记忆不是虚拟记忆;虚拟内存只是引用内存的一种方便的方式。在我看来,最好将内存可视化为磁盘上交换文件中的页面。

如果你想在32位Windows中分配一个40亿字节的块,没有问题;操作系统将在磁盘上为您保留40亿字节。然后你可以决定如何将其映射到你的虚拟地址空间;并不是所有的都适合,所以你需要自己管理映射和取消映射。Raymond在这里描述了如何这样做:

http://blogs.msdn.com/b/oldnewthing/archive/2004/08/10/211890.aspx

我不知道有什么库可以让你在c#中很容易地对内存块进行操作,但是如果没有的话,写一个库也不会特别困难。坦率地说,尽管我倾向于使用内存映射文件(你可以在c#中做),而不是自己做映射。