动态分配内存 space 大于 SIZE_T/UINT(即在堆上)

Allocate memory space larger than SIZE_T/UINT dynamically (i.e. on the heap)

我需要分配一块 space 的连续内存,其大小只能存储在 LONGLONG (long long) 容器中。当 LONGLONG 值与 new 语句或 malloc() 函数一起使用时,编译器会抛出 C4244 类型的警告,说明当从 LONGLONG 转换为 size_t(在 malloc() 的情况下)或 unsigned int(在 new 的情况下)。

我正在使用 Visual C++ 编译器。

提前致谢。

LONGLONG allocSize;
PBYTE memPool;
 
memPool = new BYTE[allocSize]; // C4244
memPool = (PBYTE) malloc(allocSize); // C4244

仅当代码被设置为编译为 x86 指令集时才会出现所述警告,其中可以使用的内存不超过 4 GB。与任何(和每个)case/instance 一样,分配超出 SIZE_T 范围的连续内存是不可能的,这使得 x64 架构的大小数据类型的范围比 x86 的范围更宽(32-位)架构。

试试这个:

LONGLONG allocSize;
PBYTE memPool;

int nAllocSize = (int) allocSize;  // cast to an integer
 
memPool = new BYTE[nAllocSize]; // no more C4244

memPool = (PBYTE) malloc(nAallocSize); // no more C4244