Windows上的大型连续虚拟内存分配

时间:2015-12-06 19:07:04

标签: c++ windows memory

最近我遇到需要在64位Windows系统上分配大约4GB连续内存(物理或虚拟)的块,该系统具有16GB的物理内存。我尝试使用new []分配这个缓冲区,然而它抛出了一个std :: bad_alloc。例如,以下失败:

char* buffer = new char[LARGE_BUFFER_SIZE];

当我以块的形式分配缓冲区时(我使用了1024个字节的块),但是我可以达到4GB的内存。所以下面的代码没有失败:

char** buffer = new char*[LARGE_BUFFER_SIZE/CHUNK_SIZE];
for(size_t i = 0; i < LARGE_BUFFER_SIZE/CHUNK_SIZE; ++i)
{
    buffer[i] = new char[CHUNK_SIZE];
}

这样做的缺点是内存不连续。有没有办法使用C或C ++标准库例程或Windows提供的函数我可以用来分配4GB的连续虚拟内存?

1 个答案:

答案 0 :(得分:-3)

为两个编译器

编写头文件extern

如何为此程序编写.h头文件。我之前从未写过.h头文件。我需要帮助。帮助我。

这是完整的程序,包括说明。

#include <stdio.h>

void dchar(char c)
{printf ("%d\n",(int)c);}

dchar函数很简单,然后按下传递给函数的数值。 您认为在这样一个简单的函数中会出现什么问题,特别是在提供类型安全性时。 您可以通过单独编译此简短源文件来检查这一点。然后输入以下源并将其编译到位。

#include <stdio.h>
#include "myheader.h"

extern void dchar (unsigned char);

void main()

{dchar(128);}

在您尝试运行链接程序之前,一切似乎都很正常。而不是风化的契约价值128 显示值-128。存在无法比较的视图类型转换,因此数值错误 被解释了。修复功能的过程甚至没有机会阻止这种情况。 通过使用编写良好的头文件来解决此问题。将外部声明写入.h头文件并使用#include 在程序中添加头文件。当然,即使现在确实发生了错误,但这种方法的概率也大大降低了。

MyHeader.h

ifndef __MYHEADER_H
define __MYHEADER_H

ifdef __cplusplus
extern "C"{
endif
  void dchar(unsigned char);
  void char*(char c);

ifdef __cplusplus
  }
endif
endif

如果你能帮助我,我真的很感激。我对此计划感到头疼 我需要.h头文件。