sizeof(test) = 1
如果使用VS 2010.因爲每個C++數據類型都必須是可尋址的,所以「test」bool變量是8位(1字節)。
我的問題是,「測試」變量真的佔用內存中的1個字節嗎?
有沒有什麼實現技巧可以讓bool數據類型只佔用 一點?如果是的話,你能舉個例子嗎?
bool test1[32]
(在VS 2010), int test2
(在VS 2010)
做test1
和test2
佔用相同的內存?
sizeof(test) = 1
如果使用VS 2010.因爲每個C++數據類型都必須是可尋址的,所以「test」bool變量是8位(1字節)。
我的問題是,「測試」變量真的佔用內存中的1個字節嗎?
有沒有什麼實現技巧可以讓bool數據類型只佔用 一點?如果是的話,你能舉個例子嗎?
bool test1[32]
(在VS 2010), int test2
(在VS 2010)
做test1
和test2
佔用相同的內存?
test1
的每個元素必須是可尋址的。這意味着test1
需要至少32 字節(而不是位)。
如果需要多個布爾值存儲在一個變量,使用std::bitset
或std::vector<bool>
(但要注意的是,後者是沒有真正的bool的載體,它的目的是節省空間的專業化)。
IIRC,C++ 11還定義了std::dynamic_bitset
。
你可能意思是32位,而不是字節 – Milan
如果處理器有8位可尋址單元,那意味着「bool」必須佔用1個字節(字節),而不是4個(32位)。是的,這裏仍然有8位可尋址系統。 ARM9可以訪問8或32位值。 –
@ entity64:'test1'是32個可尋址的'bool'對象的數組,每個對象需要(至少)32個字節。 –
我的問題是,「測試」變量真的佔用內存中的1個字節嗎?
是的,如果sizeof(bool)==1
。基本上,sizeof bool是實現定義的,這意味着對於某些編譯器它可能大於1個字節。
布爾TEST1 [32](2010年VS),INT TEST2(2010年VS)
不TEST1和TEST2佔用相同的存儲器?
它們各自佔用的東西可以通過使用sizeof運算符來知道。這就是運營商的規模。因此test1
和test2
將分別佔用sizeof(test1)
和sizeof(test2)
字節。
另一種可能性有1位的變量,是投入到一個位域結構:
struct {
int a:1;
int b:1;
};
不應該是'unsigned a:1'嗎? – Xeo
嗯,我確定我是這樣使用它的,儘管我從來沒有把它看作一個1位有符號整數,所以你在這裏有一個觀點。 –
我要強調,這可能是合理的一個平臺,在4個字節存儲在一個32位的布爾當超速優化時,然後,如果在一個結構中有4個布爾值,那麼只需要一個ALU操作來檢查bool是否爲真,相比之下,當一個機器字中包含許多布爾值時。 (Ofc這麼小的差別通常並不重要)。 – Kos
一些嵌入式處理器實際上具有位尋址內存,所以bool變量可以佔用一位。 –