編譯模式模式有時(shí)也叫做尋址模式或內(nèi)存模式,它處理的就是如何在內(nèi)存中為程序、數(shù)據(jù)、堆棧分配空間并存取它們。
微模式(tiny):微模式下整個(gè)程序只有一個(gè)段,這個(gè)段包含碼、靜態(tài)和全局?jǐn)?shù)據(jù)、堆棧和堆。因?yàn)橹挥幸粋€(gè)段,在執(zhí)行時(shí)DOS將把寄存器CS、DS、SS設(shè)置為相等,全都指向這個(gè)段。在這個(gè)段內(nèi),碼首先裝入,地址最低,接著是靜態(tài)變量和全局變量。然后是堆,最后是堆棧。堆棧和堆都是動(dòng)態(tài)的,對(duì)從低地址往高地址增長(zhǎng),堆棧從高地址往低地址增長(zhǎng),若兩者相等,則表示空間耗完了。
小模式:小模式是最常用的模式,小模式和微模式一樣都是小數(shù)據(jù)和小程序,但是它的碼和數(shù)據(jù)/堆棧/堆段是分開(kāi)的,所以CS不等于DS和SS。其次,除了和數(shù)據(jù)/堆棧共用一個(gè)段的堆外,還有一個(gè)遠(yuǎn)堆。
中模式:在數(shù)據(jù)、堆棧、堆的分配方面,中模式和小模式是一樣的,差別在于碼段的分配,中模式下,來(lái)自不同源文件的碼模塊放在不同的碼段內(nèi)。嚴(yán)格的講,同一個(gè)源文件內(nèi)的各函數(shù)也是放在不同的碼段的。
緊湊模式:緊湊模式在概念上是最簡(jiǎn)單的。碼、靜態(tài)數(shù)據(jù)、堆棧、堆各有自己的段。堆只有遠(yuǎn)堆,沒(méi)有近堆。
大模式:在靜態(tài)數(shù)據(jù)、堆棧、堆的分配方面,大模式等同于緊湊模式,在碼的分配方面,大模式等同于中模式。無(wú)論在數(shù)據(jù)指針還是函數(shù)指針,一律都是遠(yuǎn)指針。和緊湊模式一樣,靜態(tài)數(shù)據(jù)的總量不能超過(guò)64K。
巨模式:巨模式取消了靜態(tài)數(shù)據(jù)的總量不能超過(guò)64K的的限制,來(lái)自不同源文件的碼放在不同的段內(nèi),來(lái)自不同源文件的靜態(tài)數(shù)據(jù)也放在不同的段內(nèi),只有堆棧是合在一起的。
posted on 2008-02-11 11:57
alec的工作室 閱讀(610)
評(píng)論(1) 編輯 收藏