2010-10-22 102 views
1

是否有可能在C/C++程序中为特定数组分配虚拟内存(交换空间),以便程序继续使用RAM作为其余变量,也许在某些类型的问题上获得一些好处?分配内存之前虚拟内存

+1

你有什么具体的担心?通常,操作系统和默认的分配器处理事情(包括大事情:)就好了。 – 2010-10-22 16:21:29

+0

我有一个程序处理二叉树,非常大的程序,并生成格式化为字符串(符号数学)的数学表达式,这些表达式添加到一个大数组中,但是在添加过程中,我需要将它们放在正确的位置,像如果它是一个矩阵。 – labotsirc 2010-10-22 17:13:27

回答

9

对于第一部分:在几乎每一个现代操作系统中,都有一种将文件映射到内存位置的方法。你可以这样做,并使用该文件作为你描述的“交换空间”。 POSIX标准定义了mmap(可通过Linux和Mac OS使用),Windows有MapViewOfFile

对于第二部分:它很大程度上取决于您遇到的问题类型。机会只会让访问阵列的速度变慢(比如“可笑的变慢”)并且没有任何帮助,除非它是一个庞大的阵列,并且您正在寻找一种通过将内容外包到硬盘驱动器来节省内存的方法。通常情况下,你的操作系统会自己分配交换空间并按照它认为合适的方式处理交换空间,所以明确地使用文件作为额外的内存对于我来说看起来不是一个好的解决方案。

+0

+1 - 尽管您在Windows上寻找的电话是“MapViewOfFile”。 – 2010-10-22 16:30:48

+0

@比利奥尼尔谢谢,改变了这一点。 – zneak 2010-10-22 16:32:52

+0

谢谢,那么自动操作系统交换应该小心希望有人需要什么,我只是好奇,如果有更好的解决方法 – labotsirc 2010-10-22 17:10:17

1

您应该允许操作系统来处理该问题。如果你决定在磁盘上“分配”空间,访问你的数组将非常慢,并且考虑到数组可能是非常大的操作,这将需要永久。目前所有的操作系​​统都应该支持自动将程序内存放入交换区或页面文件中。如果你对性能没有兴趣,你可以在“内存”中创建自己的数组,但是我会建议你不要在运行时在程序中发生某些事情,否则这可能不会被清理干净,并可能导致更多问题。

+0

好吧,非常清楚,我认为不好的只是使用交换处理的操作系统。如果它智能地处理它,那么我不会达到比 – labotsirc 2010-10-22 17:11:32

+0

更好的解决方案,当然,谢谢! – labotsirc 2010-10-22 17:16:26

+0

如果它同时存在大量内存,则可能会遇到导致程序运行缓慢的硬故障问题,因为其大部分内存位于页面/交换中,只需尽可能保持干净,以避免造成较大的内存性能问题取决于你想要做什么 – 2010-10-23 04:07:24