2016-11-28 73 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)'。 –