关于应用程序的内存限制,我有点困惑。据我所知,如果我编写一个针对x64的C#应用程序,我的程序将可以访问8TB的虚拟地址空间 = 硬盘上的空间?
操作系统>= Windows 7专业版支持192GB RAM。因此,如果我有192GB的系统(不幸的是我没有),我可以将超过8.1TB的数据加载到内存中(假设没有其他进程在运行)?
只有当我没有可用的RAM时,才会使用虚拟内存吗?我认为,与使用RAM相比,虚拟内存存在性能问题?
如果涉及内存管理,那么请原谅我是否提出了一些愚蠢的问题。
关于应用程序的内存限制,我有点困惑。据我所知,如果我编写一个针对x64的C#应用程序,我的程序将可以访问8TB的虚拟地址空间 = 硬盘上的空间?
操作系统>= Windows 7专业版支持192GB RAM。因此,如果我有192GB的系统(不幸的是我没有),我可以将超过8.1TB的数据加载到内存中(假设没有其他进程在运行)?
只有当我没有可用的RAM时,才会使用虚拟内存吗?我认为,与使用RAM相比,虚拟内存存在性能问题?
如果涉及内存管理,那么请原谅我是否提出了一些愚蠢的问题。
您的问题实际上包含了几个相关的问题,每个问题单独回答如下:
操作系统版本>=Windows 7专业版支持192GB内存。如果我有一个192GB的系统(不幸的是我没有),我可以将超过8.1TB的数据加载到内存中(假设没有其他进程在运行)吗?
不,它仍然是8TB。这是可寻址空间的最大量,无论它是在RAM还是其他地方。
然而,即使您卸载了Windows本身,您也永远不能使用8TB,因为操作系统需要跟踪正在使用的空间。总体而言,您可能可以达到约7TB。
只有当我用完可用的RAM时,虚拟内存才会被使用吗?
不是的,如果您已经启用虚拟内存,则整个RAM通常预加载到硬盘驱动器上(耗时几秒钟左右)。这允许操作系统卸载某些内容以腾出空间,而无需保留数据。请注意,操作系统会详细跟踪,因此它会知道是否是这种情况。
我假设使用虚拟内存会带来性能影响,与使用RAM相比?
这取决于您的上下文。硬盘上的每次搜索都需要计算时间的漫长,但仍然只有几分之一秒的时间。假设您的处理过程没有崩溃并且重复访问虚拟内存,您不应该在高性能计算以外感觉到显着的性能损失。
如果这些问题看起来很愚蠢,请原谅。但是当涉及到内存管理时,我对此不太熟悉。
您的主要问题是您对内存工作方式有一些误解,它们与现实不符合。如果您真的感兴趣,您应该了解现代系统中内存的使用方式。
例如,大多数人将指针概念化为指向内存中的位置,因为它是基本结构。这并不完全正确。实际上,指针包含一些信息,可以解码为系统可寻址空间中的位置,而这并不总是在 RAM 中。这个解码过程使用了相当多的技巧,非常有趣,但超出了这个问题的范围。
任何 CPU
的应用程序。然后,.NET 加载器根据其运行的平台决定将执行哪个版本的运行时环境,并将其编译成什么类型的本机代码。除非您正在使用将加载到为您的应用程序创建的进程中的自定义本机组件,否则无需指定平台。然后,将将此进程与某些虚拟地址空间相关联 - 如何将其映射到物理内存由操作系统管理...