Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在c+中声明大字符数组+;_C++_Unix_G++_Bitmapdata - Fatal编程技术网

C++ 在c+中声明大字符数组+;

C++ 在c+中声明大字符数组+;,c++,unix,g++,bitmapdata,C++,Unix,G++,Bitmapdata,我现在正试图声明一个大字符数组。我将字符数组用作位图(如布尔映射,而不是图像文件类型)。以下代码生成编译错误 //This is code before main. I want these as globals. unsigned const long bitmap_size = (ULONG_MAX/(sizeof(char))); char bitmap[bitmap_size]; 错误是数组维度溢出。我认识到我正试图让我的流程消耗大量数据,并且可能存在一些限制,阻止我这样做。我很好奇我

我现在正试图声明一个大字符数组。我将字符数组用作位图(如布尔映射,而不是图像文件类型)。以下代码生成编译错误

//This is code before main. I want these as globals.
unsigned const long bitmap_size = (ULONG_MAX/(sizeof(char)));
char bitmap[bitmap_size];
错误是数组维度溢出。我认识到我正试图让我的流程消耗大量数据,并且可能存在一些限制,阻止我这样做。我很好奇我是否犯了语法错误,或者是否需要从内核请求更多的资源。另外,我对使用某些类创建位图不感兴趣。谢谢你抽出时间

编辑
ULONG_MAX在很大程度上取决于您使用的机器。我在这台机器上编译的代码超过了42亿。总而言之,我不想使用常量,至少是为了内存分配。

< P>我理解,C++中数组的最大大小是平台支持的最大整数。您的长类型BITMAPZM大小常数超过了这个限制。

< P>我理解,C++中的数组最大大小是平台支持的最大整数。您的长型位图大小常量可能超过该限制。

ULONG\u MAX/sizeof(char)
ULONG\u MAX
相同,这是一个非常大的数字。事实上,它太大了,以至于您甚至在虚拟内存中也没有空间容纳它(因为
ULONG_MAX
可能是整个虚拟内存中的字节数)

你肯定需要重新考虑你想做什么。

ULONG_MAX/sizeof(char)
ULONG_MAX
相同,这是一个非常大的数字。事实上,它太大了,以至于您甚至在虚拟内存中也没有空间容纳它(因为
ULONG_MAX
可能是整个虚拟内存中的字节数)


您肯定需要重新考虑您要做的事情。

在大多数系统上声明这么大的阵列是不可能的——在32位系统上,该阵列为4GB,无法容纳可用的地址空间,而在大多数64位系统上,该阵列为16EB(1600万TB),这也不适合那里的可用地址空间(顺便说一句,可能比整个地球上存在的内存更多)


使用
malloc()
分配大量内存。但要现实一些

在大多数系统上不可能声明这么大的阵列——在32位系统上,该阵列为4GB,不适合于可用地址空间,而在大多数64位系统上,该阵列为16EB(1600万TB),也不适合于可用地址空间(顺便说一句,可能比整个地球上存在的记忆还要多)


使用
malloc()
分配大量内存。但要现实一些。

仅供参考,
sizeof(char)
始终为1,因此除法是毫无意义的。您知道,您正试图在32位机器上分配4G内存?结果是4G内存,这都是静态内存。你为什么要这样做?@brendanw在整个程序生命周期中都需要阵列。我知道我需要的位图的大小。是否存在固有的静态分配错误。另外,您是否能够在函数外malloc?仅供参考,
sizeof(char)
始终为1,因此除法是无意义的。您知道,您正试图在32位机器上分配4G内存?结果是4G内存,这都是静态内存。你为什么要这样做?@brendanw在整个程序生命周期中都需要阵列。我知道我需要的位图的大小。是否存在固有的静态分配错误。另外,您是否能够在功能之外使用malloc?谢谢。我的意思是将ULONG_MAX除以字符中的位数,而不是字节数。编译器从此不再抱怨了。谢谢。我的意思是将ULONG_MAX除以字符中的位数,而不是字节数。此后,编译器不再抱怨。