通常我們會(huì)這樣聲明BOOL 變量:
class CMyClass {
...
BOOL m_bVar1;
BOOL m_bVar2;
BOOL m_bVar3;
BOOL m_bVar4;
BOOL m_bVar5;
BOOL m_bVar6;
BOOL m_bVar7;
BOOL m_bVar8;
...
};
考慮到BOOL 變量在Win32 下其實(shí)是一個(gè)int ,占4個(gè)字節(jié),那么上面8個(gè)BOOL變量就會(huì)占去 32個(gè)字節(jié)。
typedef int BOOL; // BOOL takes 4 bytes
其實(shí),我們可以改變BOOL變量的聲明來(lái)使之只占一個(gè)bit:
class CMyClass {
...
BOOL m_bVar1:1;
BOOL m_bVar2:1;
BOOL m_bVar3:1;
BOOL m_bVar4:1;
BOOL m_bVar5:1;
BOOL m_bVar6:1;
BOOL m_bVar7:1;
BOOL m_bVar8:1;
...
};
上面的代碼中,每個(gè)BOOL 變量只占了1個(gè)比特(bit), 那么上面8個(gè)BOOL變量就會(huì)占去1個(gè)字節(jié)。
內(nèi)存節(jié)省了32倍?。?!
不過(guò)從另外一方面, CPU 在處理這些bit類型的BOOL變量的時(shí)候, 需要做位運(yùn)算來(lái)把其中的值取出來(lái), 所以會(huì)額外消耗CPU資源。 使用的時(shí)候需要綜合考慮內(nèi)存和速度之間關(guān)系。
class CMyClass {
...
BOOL m_bVar1;
BOOL m_bVar2;
BOOL m_bVar3;
BOOL m_bVar4;
BOOL m_bVar5;
BOOL m_bVar6;
BOOL m_bVar7;
BOOL m_bVar8;
...
};
考慮到BOOL 變量在Win32 下其實(shí)是一個(gè)int ,占4個(gè)字節(jié),那么上面8個(gè)BOOL變量就會(huì)占去 32個(gè)字節(jié)。
typedef int BOOL; // BOOL takes 4 bytes
其實(shí),我們可以改變BOOL變量的聲明來(lái)使之只占一個(gè)bit:
class CMyClass {
...
BOOL m_bVar1:1;
BOOL m_bVar2:1;
BOOL m_bVar3:1;
BOOL m_bVar4:1;
BOOL m_bVar5:1;
BOOL m_bVar6:1;
BOOL m_bVar7:1;
BOOL m_bVar8:1;
...
};
上面的代碼中,每個(gè)BOOL 變量只占了1個(gè)比特(bit), 那么上面8個(gè)BOOL變量就會(huì)占去1個(gè)字節(jié)。
內(nèi)存節(jié)省了32倍?。?!
不過(guò)從另外一方面, CPU 在處理這些bit類型的BOOL變量的時(shí)候, 需要做位運(yùn)算來(lái)把其中的值取出來(lái), 所以會(huì)額外消耗CPU資源。 使用的時(shí)候需要綜合考慮內(nèi)存和速度之間關(guān)系。