免責聲明

Disclaimer (免責聲明)
繼續閱覽代表您接受以上的免責聲明.
To continue reading means you accept the above disclaimer.

2011年11月3日 星期四

bool 有多大?

bool 值 : 真或假 ,
基本上
一個bit 就足夠儲存
在硬碟/光碟/記憶體/... 佔掉 1 bit 的空間
在通信傳輸時佔掉 1/R 的時間,
R 是傳輸速率,
單位 bps(bits per second)

考量資料存取效率 通常 bool 會佔據byte的整數倍

在C# 中內建的 bool 佔 1 byte 而非 1 bit,
當要呼叫Windows Platform SDK 的API (C寫的函數) 時
若API參數型別為BOOL(佔4 bytes)
則從C#傳過來的1-byte bool 將會變成4-bytes BOOL
這就是一種 Marshal/Marshalling

那 bool 到底有多大?
1 bit
1 byte
4 bytes

還有2 bytes 的說法???

//=== 歷史
[ref] http://blogs.msdn.com/b/oldnewthing/archive/2004/12/22/329884.aspx

因為早期的 C 語言中 bool 並非內建型別, 所以後人就自己定了許多的 '布林'型別
1. BOOL (Windows 1.0 )
typedef int BOOL; //4 bytes

2. BOOLEAN (OS/2 NT team )
typedef BYTE BOOLEAN; // 1 byte

3. VARIANT_BOOL (Visual Basic folks)
typedef short VARIANT_BOOL;
#define VARIANT_TRUE ((VARIANT_BOOL)-1)
#define VARIANT_FALSE ((VARIANT_BOOL)0)


4. C++ 內建型別 bool , 1 byte ?

//=== 微軟
[ref] http://msdn.microsoft.com/en-us/library/tf4dy80a.aspx

Visual C++ 4.2, typedef int bool; //sizeof(bool) == 4
Visual C++ 5.0 之後, bool 變成 1 byte 的內建型別 //sizeof(bool) == 1