2012-02-23 133 views
1

我现在正在尝试声明一个大字符数组。我使用字符数组作为位图(如在布尔图中的图,而不是的图像文件类型)。以下代码会生成一个编译错误。在C++中声明大字符数组

//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亿。总而言之,我不会像常量那样使用这个常量,至少是为了内存分配的目的。

+2

只是供参考,'sizeof(char)'总是1,所以这个部分是毫无意义的。 – 2012-02-23 22:33:45

+4

你知道你正在尝试在32位机器上分配4GB的内存吗? – fazo 2012-02-23 22:33:52

+0

后续4千兆字节的内存 – triclosan 2012-02-23 22:35:45

回答

4

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

你一定要重新考虑你正在尝试做的。

+0

谢谢。我的意思是将ULONG_MAX除以char中的位数而不是字节数。编译器在此之后不再抱怨。 – order 2012-02-23 22:56:30

0

据我所知,在C的阵列的最大大小++是平台支持的最大整数。很可能您的long型bitmap_size常量超过了此限制。

4

这是不可能的声明的阵列大多数系统 - 在32位的系统上,该阵列是4 GB,它不适合可用地址空间,并且在大多数64位系统,它的16艾字节(1600万兆字节),这也不符合可用地址空间(并且顺便说一句,可能比整个星球上存在更多的内存)。

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