C++內(nèi)存篇(一):內(nèi)置類型的機(jī)器實(shí)現(xiàn)和sizeof

內(nèi)存篇(一):內(nèi)置類型的機(jī)器實(shí)現(xiàn)和sizeof

一、內(nèi)置類型的機(jī)器實(shí)現(xiàn)

C++內(nèi)置類型及尺寸:

類型 含義 最小尺寸
bool 布爾類型 未定義
char 字符 8位
wchar_t 寬字符 16位
char16_t Unicode字符 16位
char32_t Unicode字符 32位
short 短整型 16位
int 整型 16位
long 長(zhǎng)整型 32位
long long 長(zhǎng)整型 32位
float 單精度浮點(diǎn)數(shù) 6位有效數(shù)字
double 雙精度浮點(diǎn)數(shù) 10位有效數(shù)字
long double 擴(kuò)展精度浮點(diǎn)數(shù) 10位有效數(shù)字
  • 字節(jié)(byte):計(jì)算機(jī)里可尋址的最小內(nèi)存塊,一般為8位
  • 字(word):計(jì)算機(jī)里存儲(chǔ)的基本單元,一般為32位或64位。
  • 計(jì)算機(jī)將每個(gè)字節(jié)和一個(gè)地址關(guān)聯(lián)起來,可以看到相鄰字節(jié)存放的地址相差1:


    image-20200323151535387.png

? 要給一個(gè)對(duì)象分配內(nèi)存,是必須指明其類型的,因?yàn)槠漕愋椭该髁藬?shù)據(jù)所占的比特?cái)?shù)以及機(jī)器要如何解釋這些內(nèi)容,機(jī)器可以以此為依據(jù)以對(duì)象的內(nèi)存地址作為起始地址往下讀入相應(yīng)大小的比特?cái)?shù)并且依據(jù)類型進(jìn)行解釋。

以下是《C++ Primer》里推薦的一些選用類型準(zhǔn)則:

  • 當(dāng)明確知道數(shù)值不可能為負(fù)時(shí),選用無符號(hào)類型
  • 使用int執(zhí)行整數(shù)運(yùn)算。實(shí)際應(yīng)用中short常常太小而long有和int一樣的尺寸。如果數(shù)值超過int的范圍就使用long long。
  • 浮點(diǎn)數(shù)選double,因?yàn)閒loat精度經(jīng)常不夠,long double的精度一般沒有必要且運(yùn)行消耗大。

二、sizeof運(yùn)算符

? sizeof運(yùn)算符返回一個(gè)表達(dá)式或者一個(gè)類型所占的字節(jié)數(shù),下面來看一下它的用法。

sizeof(double); //返回8,,意思是8個(gè)字節(jié),即double類型的對(duì)象所占空間的大小
double A;
sizeof A; //返回8,A的類型double的對(duì)象所占空間的大小
double* p;
sizeof p; //返回4,指針p所占的空間大小
sizeof *p; //返回8,p指向的類型double所占空間大小
  • sizeof滿足右結(jié)合律(即一個(gè)表達(dá)式中存在優(yōu)先級(jí)相同的運(yùn)算符時(shí),右側(cè)運(yùn)算符優(yōu)先與操作數(shù)結(jié)合),且與*運(yùn)算符優(yōu)先級(jí)一樣,所以表達(dá)式sizeof *p的組合順序是從右往左,等價(jià)于sizeof( *p)。
  • 注意sizeof對(duì)于數(shù)組和指針操作的數(shù)組的區(qū)別:
double p[10];
sizeof(p); //返回8*10,是整個(gè)數(shù)組的大小
double *p1 = new double[10];
sizeof(p1);//返回4,是一個(gè)指針的大小

? 盡管p和p1都是一個(gè)數(shù)組第一個(gè)元素的地址,sizeof返回的內(nèi)容卻并不一樣,前者返回?cái)?shù)組對(duì)象類型占用字節(jié)數(shù)*數(shù)組的元素個(gè)數(shù),而后者返回的是一個(gè)指針占用的字節(jié)數(shù)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容