結(jié)構(gòu)體是怎么分配內(nèi)存的 C語言中結(jié)構(gòu)體在內(nèi)存中的存儲方式?
C語言中結(jié)構(gòu)體在內(nèi)存中的存儲方式?內(nèi)存中結(jié)構(gòu)的存儲模式類似于普通C語言變量和常量,但唯一的區(qū)別是對齊。一般來說,32位CPU內(nèi)存與4字節(jié)對齊,64位CPU內(nèi)存與8字節(jié)對齊。通常,#pragma pac
C語言中結(jié)構(gòu)體在內(nèi)存中的存儲方式?
內(nèi)存中結(jié)構(gòu)的存儲模式類似于普通C語言變量和常量,但唯一的區(qū)別是對齊。一般來說,32位CPU內(nèi)存與4字節(jié)對齊,64位CPU內(nèi)存與8字節(jié)對齊。通常,#pragma pack()可用于指示對齊的字節(jié)數(shù)。例如,下面的代碼將顯示在debug中test的內(nèi)存大小是28。如果生成發(fā)布版本,則內(nèi)存大小為32。#不一定。定義結(jié)構(gòu)的數(shù)組:struct s{tint B/tint x,Y/TCHAR*P/tint a[10][t}S1[]={2,1,3,“ABC”,{9,8,7,6},S2[12]或:struct s S1[10]//結(jié)構(gòu)類的數(shù)組定義。
結(jié)構(gòu)體成員變量在內(nèi)存中是連續(xù)存放的嗎?
結(jié)構(gòu)的成員可能不會連續(xù)存儲在內(nèi)存中,因為為了滿足對齊要求,可以釋放一些單元。例如,此圖顯示系統(tǒng)為結(jié)構(gòu)分配了8個字節(jié),但實際上只有5個字節(jié)(x1字節(jié),Y4字節(jié));從X和y的地址可以看出,X和y之間有3個字節(jié)空閑。
請問C語言中數(shù)組成員在內(nèi)存中的地址是連續(xù)存放的,結(jié)構(gòu)體的成員在內(nèi)存中是連續(xù)存放的嗎?
感謝您的邀請。
這個問題還沒有真正研究過,但是從計算機的原理來看,無論是文字、圖像、聲音還是視頻,顯示在顯示器上,離不開一個關(guān)鍵的東西:像素。也就是說,它由許多單點組成。例如,分辨率為1024×768??梢岳斫猓矫嬗?024個點組成,垂直面由768個點組成。說到每一點,用存儲結(jié)構(gòu)來描述它是非常容易的。它只不過是一些參數(shù),比如顏色和偏移量。應(yīng)該可以使用結(jié)構(gòu)和數(shù)組。就好像廣場上站著很多人,形成一個縱橫排列。他們中的一些人有不同于其他人的衣服顏色,所以圖案可以顯示。人越多,圖案就越精致。用一個程序來描述它,無非是確定每個人在哪里,穿什么衣服,或者是站著還是坐著??傊?,有一定的規(guī)范。參照這個例子,構(gòu)造一個數(shù)據(jù)結(jié)構(gòu)并不困難。它甚至可以優(yōu)化為描述特定位置的人,忽略其他具有共同特征的人,不描述他們,必要時直接填寫。
當(dāng)它應(yīng)用于圖像時,就是壓縮圖像。大量的公共像素,如黑白點,無法構(gòu)建。相反,當(dāng)它們被轉(zhuǎn)移到內(nèi)存中時,它們直接被代碼填充,并且只有一些小的點是用數(shù)據(jù)結(jié)構(gòu)構(gòu)造的。這樣,對內(nèi)存的需求就會小得多。
只從原理上回答,還要研究細節(jié)。我希望這個答案能給你一些啟發(fā)。