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

时间:2012-02-23 22:31:54

标签: 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];

错误是溢出数组维度。我意识到我正在尝试让我的进程消耗大量数据,并且可能存在一些限制因素阻止我这样做。我很好奇我是在发出语法错误还是我需要从内核请求更多资源。另外,我没有兴趣用某个类创建一个位图。谢谢你的时间。

EDIT     ULONG_MAX非常依赖于您使用的机器。在特定的机器上,我正在编译我的代码超过42亿。总而言之,我不会像常量一样使用那个常量,至少为了内存分配的目的。

3 个答案:

答案 0 :(得分:4)

ULONG_MAX/sizeof(char)ULONG_MAX相同,这是一个非常大的数字。事实上,即使在虚拟内存中,你也没有足够的空间(因为ULONG_MAX可能是整个虚拟内存中的字节数)。

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

答案 1 :(得分:4)

在大多数系统上声明一个大的数组是不可能的 - 在32位系统上,该数组是4 GB,不适合可用的地址空间,在大多数64位系统上,它是16 exabytes(1600万TB),它不适合那里的可用地址空间(顺便说一句,可能比整个星球上存在的内存更多)。

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

答案 2 :(得分:0)

据我了解,c ++中数组的最大大小是平台支持的最大整数。您的long类型bitmap_size常量可能超过该限制。