結(jié)構(gòu)體所占內(nèi)存大小 ”結(jié)構(gòu)體定義時(shí),結(jié)構(gòu)體本身并不占用存儲(chǔ)空間,系統(tǒng)并不給結(jié)構(gòu)體分配存儲(chǔ)空間?!斑@句話是對(duì)的嗎?
”結(jié)構(gòu)體定義時(shí),結(jié)構(gòu)體本身并不占用存儲(chǔ)空間,系統(tǒng)并不給結(jié)構(gòu)體分配存儲(chǔ)空間?!斑@句話是對(duì)的嗎?要知道何時(shí)分配內(nèi)存空間,您需要知道定義和聲明的含義。定義有如下顯式格式,如:連接說明符、類型說明符變量名;聲
”結(jié)構(gòu)體定義時(shí),結(jié)構(gòu)體本身并不占用存儲(chǔ)空間,系統(tǒng)并不給結(jié)構(gòu)體分配存儲(chǔ)空間。“這句話是對(duì)的嗎?
要知道何時(shí)分配內(nèi)存空間,您需要知道定義和聲明的含義。定義有如下顯式格式,如:連接說明符、類型說明符變量名;聲明比較復(fù)雜,聲明包括類型聲明、變量聲明等
而定義一個(gè)結(jié)構(gòu)一般不分配內(nèi)存,聲明一個(gè)結(jié)構(gòu)變量就是分配內(nèi)存結(jié)構(gòu)類型的定義只告訴編譯器如何顯示數(shù)據(jù),但不允許計(jì)算機(jī)為其分配空間。struct type的定義是struct的聲明。無論是定義還是聲明都是正確的。
只有在聲明結(jié)構(gòu)變量時(shí),才能對(duì)其進(jìn)行賦值。要使用struct,需要?jiǎng)?chuàng)建變量,即struct變量。
創(chuàng)建結(jié)構(gòu)變量:struct book library
當(dāng)您看到此指令時(shí),編譯器將創(chuàng)建結(jié)構(gòu)變量庫。此時(shí),編譯器將根據(jù)book模板為變量分配內(nèi)存空間,這里的存儲(chǔ)空間與該變量相結(jié)合。
同時(shí),以后訪問結(jié)構(gòu)變量成員時(shí),需要使用結(jié)構(gòu)變量名稱進(jìn)行訪問。
擴(kuò)展數(shù)據(jù):
結(jié)構(gòu)的大小通常是結(jié)構(gòu)中包含的變量大小之和。但是,對(duì)于較小的結(jié)構(gòu)構(gòu)件,它們可能會(huì)被強(qiáng)制對(duì)齊,導(dǎo)致空間空缺。這與閱讀記憶機(jī)制有關(guān),是為了提高效率。
通常,32位計(jì)算機(jī)按4字節(jié)對(duì)齊,小于4字節(jié)的視為4字節(jié),連續(xù)小于4字節(jié)的視為4字節(jié),直到四舍五入且下一個(gè)元素超過對(duì)齊位置,如3、2或1、4,需要單獨(dú)調(diào)整(以下結(jié)構(gòu)大小為8字節(jié))。
相應(yīng)地,64位計(jì)算機(jī)按8字節(jié)對(duì)齊。
但是,對(duì)齊不是絕對(duì)的。使用#pragma pack()修改對(duì)齊方式。如果更改為1,則結(jié)構(gòu)大小是成員變量大小的總和。
全局結(jié)構(gòu)在數(shù)據(jù)部分,局部結(jié)構(gòu)在堆棧上,函數(shù)在代碼部分。函數(shù)必須占用空間,但不占用堆??臻g。在調(diào)用函數(shù)時(shí),它最多通過按堆棧來記錄函數(shù)地址。請(qǐng)給我們一些建議