我使用malloc来分配内存,内存要求大于1GB。程序崩溃......
我想问一下这个问题是否可以解决?如果是的话怎么样?
我的RAM大小为3GB,使用32位Windows操作系统并使用vc ++进行编程
答案 0 :(得分:13)
每进程内存限制为2GB(除非您使用Windows /3GB switch)。但是,您可能会遇到内存碎片。当内存碎片化(使用VMMap可视化)时,您将无法分配大的连续块。您的选择是:
答案 1 :(得分:2)
在32位Windows操作系统上,每个进程获得4 GB虚拟地址空间,其中2 GB可供用户使用,2 GB用于内核。因此,无论做什么分配都应该在这个2 GB的空间内。请注意,此2 GB包含其他内容,例如应用程序加载的其他dll,因此此内存是碎片。当你执行malloc()时,由于malloc保证它返回一个连续的内存块,CRT将尝试找到1 GB的可用内存,因此malloc()失败。解决此问题的一种方法是使用内存映射文件,并将所需内存的一部分映射到虚拟地址空间。
答案 2 :(得分:2)
如果虚拟内存空间中没有足够的连续空间,则无法对其进行实际映射内存块。所以你应该检查你的记忆区域。
你的dll和exes映射到哪里? 有一个工具rebase.exe是ms vc框架的一部分,它允许你重新分配你的dll或exe加载到的位置。这可以为您提供更多可用的虚拟内存空间,从而可以获得更大的内存块。
"dependency walker"的个人资料选项会显示你的dll和exe的位置 加载到。
来自sysinternals的vmmap可以帮助更好地理解mwmory如何被分段和处理。