2016-11-28 44 views
0

这是我的最终目标:如何声明一个巨大的常量数组

我希望能够产生可用于任何可能的颜色深度的给定大小每一个可能的图像。

在某种意义上,这不是很复杂我大多不得不迭代在阵列/矩阵,其中图像被表示的每个像素和为给定的像素的每个可能的值再次进行迭代。

在现实生活中......因为即使是单色图像也有太多的可能性,并且对于存储来说,它们是相同的,即使是小尺寸的图像也会产生令人印象深刻的文件量和硬盘容易饱和。

所以我这样做,主要是做它的乐趣,因为我将很快能够访问群集,想尝试它这个老项目。但旧项目使用SFML也不是真正有效的(也SFML在终端是不是一个真正的好主意)

现在的问题:

因为我大量使用像素的每个不同的值在每次迭代中,我都想将它设置为一个全局常量,它将包含一个可能的值。所以它就像一个16M的unsigned char [3]数组。这给类似的RAM 50MB只用于它,所以不是太庞大的管理,最重要,一组没有被上飞和一个不错的生成的恒定值的(我想?)增益时间和效率,因为数据不断被使用。

问题是,这个数组很大,只是让它编写了一个很好的空间块(〜640MB),我不知道这个文件的大小是否是一个问题,当我尝试编译应用程序时调用它,我得到错误了内存分配XXXX字节,有没有更好的办法让这个阵列设置?或者这个想法不如我想象的那么好,还有更好的方法去做我想做的事情?

产生阵列的劳克的内容是我的第二个想法,但它只是需要这么多的时间,这不是有趣,我prefere它在真实图像生成度过。

+6

也许你应该问自己:“难道我确实需要时才数组,大,或者是有没有更好的办法?” –

+1

检查'mmap'。它允许将现有文件的内容映射到内存。您可以将值保存在64MB文件中,并在程序启动时将其映射到内存。 – Marian

+0

@JohnnyMopp我在应用程序的执行过程中多次提供了每个值,我不需要拥有它,并且可以在需要时从一个或多个循环或类似环境中选择它们,但为了提高效率已经在内存中,对我来说更好 – Kane

回答

0

你不需要这样的数组,尤其是当你想在pixel_matrix[i]中保留i的最不重要的三个字节时。

从您发布的片段,可以产生的pixel_matrix[i]的值:

pixel_matrix[i][0] = (i >> 16) & 0xFF; 
pixel_matrix[i][1] = (i >> 8) & 0xFF; 
pixel_matrix[i][2] = i & 0xFF; 

上面的公式呈现的pixel_matrix无用的存储。

+1

在(一个或三个)宏或内联函数中实现公式,您可以使用'pixel_matrix(i,1)'或'pixel_GREEN(i)'。 –