3

我对应用程序的内存限制有点困惑。据我所知,如果我编写针对 x64 的 ac# 应用程序,我的程序将可以访问 8TB 的虚拟地址空间 = HD 上的空间?

操作系统 >= Windows 7 专业版支持 192gigs 的 RAM。所以如果我有 192gig 系统(不幸的是我没有),我可以将超过 8.1TB 的数据加载到内存中(假设没有其他进程正在运行)?

是否仅在我用完可用内存时才使用虚拟内存?我假设存在与虚拟内存与使用 RAM 相关的性能影响?

抱歉,如果这些问题看起来很愚蠢,但是在内存管理方面,我很绿色。

4

2 回答 2

1

您的问题实际上是几个相关的问题,分别处理:

操作系统 >= Windows 7 专业版支持 192gigs 的 RAM。所以如果我有 192gig 系统(不幸的是我没有),我可以将超过 8.1TB 的数据加载到内存中(假设没有其他进程正在运行)?

不,它仍然是 8 TB。这是可寻址空间的最大数量,无论是在 RAM 中还是在其他地方。

但是,即使您已经卸载了 Windows 本身,您也永远无法使用 8 TB,因为操作系统需要跟踪正在使用的空间。总的来说,您大概可以达到 7 TB。

只有当我用完可用的内存时才使用虚拟内存?

不,如果您打开了虚拟内存,则通常会将整个 RAM 预加载到您的 HDD 上(等待几秒钟)。这允许操作系统在需要时卸载某些内容以腾出空间,而无需保留数据。请注意,操作系统会保持彻底的跟踪,因此会知道是否是这种情况。

我假设存在与虚拟内存与使用 RAM 相关的性能影响?

取决于你的上下文。硬盘驱动器上的每次搜索都需要计算永恒,但它仍然只有几分之一秒。假设您的进程没有颠簸并重复访问虚拟内存,您应该不会注意到高性能计算之外的显着性能影响。

抱歉,如果这些问题看起来很愚蠢,但是在内存管理方面,我很绿色。

你的主要问题是你对记忆如何工作有一些与现实不符的先入为主的观念。如果您真的感兴趣,您应该研究一下现代系统中如何使用内存。

例如,大多数人认为指针指向内存中的某个位置,因为它是基本结构。这并不完全正确。实际上,指针包含一条信息,可以将其解码到系统可寻址空间中的某个位置,该位置并不总是在 RAM 中。这个解码过程使用了很多有趣的技巧,但超出了这个问题的范围。

于 2012-11-13T16:54:45.583 回答
0

通常,您应该编写面向Any CPU. .NET 加载程序然后决定(取决于它运行的平台)哪个版本的运行时环境将执行应用程序以及将其编译成什么样的本机代码。无需指定平台,除非您使用将加载到为您的应用程序创建的进程中的自定义本机组件。然后,此过程与一些虚拟地址空间相关联 - 映射到物理内存的方式由操作系统管理......

于 2012-11-13T16:41:07.747 回答