關於為什麼會有偏移一說,粗略解釋一下...
# y* v' i0 v2 c: c4 c
現在的程式編寫都是物件導向的,就是用類來封裝物件的屬性和方法...
我們假設遊戲大致是由以下幾個類構成的:
: r1 o, s$ ]: d0 _+ b) u
cgame 遊戲類
; z* f/ k: c* h/ a
cactor 角色類
" b5 r% u v9 b' j1 ^6 w' q& r6 ~' _
cmonster 怪物類
citem 物品類
% o( ^: g0 t$ t* q" i* l; y
......
下面是各個類的宣告:
8 w+ c$ s& ^( ]
class cactor
: i g' f, x7 h3 h6 o
& z/ k+ p. q) t, |" [
class cmonster
; p/ l" z h6 q3 s- p
......
2 l0 w' _* k# f0 r8 c. }
# b/ z$ \6 e2 t- b8 z, i$ q* z
class cgame
+ s2 j0 t& w4 `% j
+ a6 z$ x4 `5 n1 |9 c
......
9 r7 r% ]2 x; ~
- v- _& v! ]1 w' s4 n
也就是說角色資訊、怪物資訊、物品資訊這些類在遊戲類裡面是以
類指標形式
宣告的!
7 u; l4 r; s2 `9 e3 p7 r
2 j( o: e* b$ c* w
遊戲啟動以後,cgame類應該作為乙個全域性變數被建立並初始化,
而遊戲就會在cgame類中的初始化成員函式中呼叫動態記憶體建立函式 new 來
建立cactor、cmonster、citem等物件的例項,因為是動態建立的,
所以他們的首位址是變動的...但是新建立的cactor類的首位址就
儲存在cgame類中成員變數cactor類指標中,其餘類推...
理解了上面的,對於偏移就應該好理解了...
cgame類是全域性靜態變數,首位址固定!那麼cactor類的首位址就應該是cgame類首位址+偏移得到...這個偏移就取決於在cgame類中成員變數cactor* pactor是第幾個變數,也就是它前面的成員變數佔了多少個位元組就取多少的偏移...那麼依此類推,cactor類中角色紅藍資訊就是由cactor的首位址+偏移得到......
) @! s; r, t# x o
還有一點值得注意,現在的主流cpu都是32位的,也就是4個位元組,那麼它的指令都是基於雙字的寬度來設計的,也就是說處理雙字寬度的資料最快...所以就算宣告的是int型別(2位元組),編譯器編譯後這個變數在記憶體中仍然占用4個位元組來儲存...
結構體也是這樣...
關於為什麼會有偏移一說,粗略解釋一下
關於為什麼會有偏移一說,粗略解釋一下.y v i0 v2 c c4 c 現在的程式編寫都是物件導向的,就是用類來封裝物件的屬性和方法.我們假設遊戲大致是由以下幾個類構成的 r1 o,s d0 b u cgame 遊戲類 z f k c h a cactor 角色類 b5 r u v9 b j1 6 ...
說一說我為什麼還留在資訊化這個行業
作為乙個純工科出身的妹子 大學學的是機械設計 誤打誤撞進入了這個行業。都說軟體行業好,可是erp屬於軟體行業裡的傳統行當。相比網際網路還是有一定差距的。中間經歷過各種迷茫,也曾經想要逃 冷靜下來想了想,其實每個行業都有這樣的問題 因為薪資低,因為不喜歡,因為有瓶頸等等而選擇轉行。但是一步一步走到今天...
說一說 年輕的資本到底是什麼
前段時間得了腎結石。其過程還是很驚悚,大家原諒我來到地球三十多年幾乎沒有生過病 感冒幾乎都不得 因此那天上午突然左腰部劇烈疼痛時,我一度以為即將進入小盒子。到了醫院,急診,一痛止痛針 b超 各項檢查一條龍服務完畢。那位長得好像奧特曼的急診醫生問我 要不要做個ct,要不做個吧?此時的我已然齜牙咧嘴,急...