动态分配内存 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
我需要分配一块 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