2011-06-10 93 views
1

我正在研究生成大量類(百萬)實例的程序。這個課程非常簡單,只需要3個花車。濃縮3漂浮到uint64_t

現在這些花車可以存在的範圍在0到1之間(顏色值),並且通常它們是非常簡單的值(1,0.5,0.25,0)。爲了節省內存,我認爲讓這些類的池最好,因爲它們只用於只讀環境,所以它們可以在多個地方共享指針樣式。

我認爲將這些對象存儲在unordered_map中會起作用,並且會使用uint64_t的鍵值。密鑰的值將是每個浮點數的高21位。

是否有一種簡潔的方式來獲得每個浮點數的高21位,並將它們放在一起成爲一個64位整數?

或者這只是一個愚蠢的方式去做這件事?我不確定這是否有效或有利,但如果它有效,我將把它擴展到程序中的其他類別(位置值,形狀等可能最終共享值)

+4

3個浮點數在大多數平臺上佔用12個字節。算一算。除非你在嵌入式平臺上工作,否則可能不值得。 – 2011-06-10 19:11:41

回答

6

您應該爲每個顏色值(24位顏色)使用一個字節。這將使你的每個班級佔用1/4(填充1/3)空間。無論如何,這是屏幕上每個像素的最高質量格式。

編輯: 如果你想節省更多的空間,你可以讓這些類存儲RGB565格式的16位顏色。然後,如果您需要進行顏色查找,則可以使用這將做出的短小,作爲關鍵。

+0

這似乎比我在做的事更容易! – Veaviticus 2011-06-10 19:23:36

5

或者這只是一個愚蠢的方式去做這件事?

是的。

保持簡單。