2016-04-22 75 views
2

@Zbyl我在這個線程中看到了你的答案(Bit fields in C#) 我真的很喜歡Bitvector32方法,但是爲了優化的目的:如果我有足夠大小的結構的8位/ 12位(小於32位),有沒有辦法以小於Bitvector32的方式來做,因爲這將是永遠不會使用的大量內存分配:我將只使用前8位Bitvector32。 這裏是我想在C#中,使結構的例子:從C++到C#//結構內存優化

struct iec_qualif 
{ 
    unsigned char var :2; 
    unsigned char res :2; 
    unsigned char bl :1; // blocked/not blocked 
    unsigned char sb :1; // substituted/not substituted 
    unsigned char nt :1; // not topical/topical 
    unsigned char iv :1; // valid/invalid 
}; 
+5

我看到你也優化了字段名稱。 –

+0

你是什麼意思? –

+0

@DmitriBudnikov意味着你選擇了很短的名字.... – marom

回答

1

起初,我會考慮你的實際處理結構的數量。如今,配備GB內存的硬件應該能夠輕鬆應對數千個結構,即使每個結構浪費3個字節(1個 000個結構將佔用4 MB可能> 1000 MB的可用空間)。考慮到這一點,你甚至可以完全沒有位字段,每個字段只有正常字節(然而,你的setter應該檢查範圍,然而),導致6個字節而不是4個(可能還有2個用於對齊問題),但讓你更快地訪問這些值(getter),因爲沒有必要調整一些操作。

另一方面:最後的位字段只不過是一種讓編譯器編寫代碼的簡便方法,否則您必須編寫自己的代碼。但通過一些練習,自己處理這些位並不是一件太困難的任務,請參閱this answer中您自己提及的主題('手工訪問器'部分),將所有數據內部存儲在類型爲byte的變量中並訪問它通過移位和掩蔽。