亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
樓主: lemoncookie
打印 上一主題 下一主題

也談指針,指向內存大小,指針的大小... [復制鏈接]

論壇徽章:
0
31 [報告]
發(fā)表于 2010-10-17 09:25 |只看該作者
本帖最后由 iLRainyday 于 2010-10-17 09:31 編輯
我絕對不會說“地址是指針”,只可能說指針的值是地址

pointer和address是兩個概念。pointer是某個object的reference,屬于一個high-level的概念,而address是一個low-level概念,表示內存單元的位置。只不過在c語言里,pointer是通過address的方式來實現對于object的reference的。

pointer常常通過address實現,但并不是總這樣。在一些企圖撲捉dangling reference的語言中,一個pointer可能包含了一個地址和一個access key.

這兩個概念在《programming language pragmatics》中,作者scott做過區(qū)分。

論壇徽章:
2
程序設計版塊每日發(fā)帖之星
日期:2015-06-17 22:20:00每日論壇發(fā)貼之星
日期:2015-06-17 22:20:00
32 [報告]
發(fā)表于 2010-10-17 09:47 |只看該作者
提示: 作者被禁止或刪除 內容自動屏蔽

論壇徽章:
0
33 [報告]
發(fā)表于 2010-10-17 11:20 |只看該作者
同意。我認為在C語言中  pointer = address + type
    謝謝你提到的書,我去找找


C語言中,pointer就是通過address實現的吧。pointer肯定有對應的type,不過type的信息顯然沒有存儲在pointer中。

論壇徽章:
2
程序設計版塊每日發(fā)帖之星
日期:2015-06-17 22:20:00每日論壇發(fā)貼之星
日期:2015-06-17 22:20:00
34 [報告]
發(fā)表于 2010-10-17 19:30 |只看該作者
提示: 作者被禁止或刪除 內容自動屏蔽

論壇徽章:
0
35 [報告]
發(fā)表于 2010-10-18 15:51 |只看該作者
嗯,一般說來很少有一定的事,那也麻煩回復時看清別人有沒有說一定
另外,您這兩句話說了等于沒說, ...
lemoncookie 發(fā)表于 2010-10-14 22:16



    你可以舉例子,那么應該說舉例而言。
    不說舉例而言就不合適。

    實現指針時是否一定要用4個字節(jié)的地址。以及系統地址總線字長是否四個字節(jié)。這是不一定的。
    至于指針指向啥地方,當然不一定是堆了。指向棧的、指向靜態(tài)數據區(qū)的也很常見。你可以只字不提,但你沒有說你那只是舉個例子,那我只好跟你說,不一定了。

論壇徽章:
2
青銅圣斗士
日期:2015-11-26 06:15:59數據庫技術版塊每日發(fā)帖之星
日期:2016-07-24 06:20:00
36 [報告]
發(fā)表于 2010-10-18 16:03 |只看該作者
回復 31# iLRainyday

請教一下, programming language pragmatics這本書, 是講C語言的么?
書中的pointer是泛指?

感覺不是指的C語言中的pointer吧?

論壇徽章:
0
37 [報告]
發(fā)表于 2010-10-18 19:08 |只看該作者
TC上的指針  與 GCC 上的指針是不同地。

論壇徽章:
2
程序設計版塊每日發(fā)帖之星
日期:2015-06-17 22:20:00每日論壇發(fā)貼之星
日期:2015-06-17 22:20:00
38 [報告]
發(fā)表于 2010-10-19 07:38 |只看該作者
提示: 作者被禁止或刪除 內容自動屏蔽

論壇徽章:
0
39 [報告]
發(fā)表于 2010-10-19 09:22 |只看該作者
請問差別在何處
pmerofc 發(fā)表于 2010-10-19 07:38


TC是16位程序,生成代碼也是16位代碼。有6中模式tiny,small,medium,compact, larger,huge,3種地址關鍵字far、near、huge。
以下是抄來的。

      在tiny、small模式下,所有的函數定義、全局變量定義和指針變量的定義,如果沒有顯示的加上far、near、huge等關鍵字,都默認為使用了near關鍵字;
      在medium模式下,函數定義默認使用了far關鍵字,變量定義默認使用了near關鍵字;
      在compact模式下函數定義模式使用了near關鍵字,變量定義默認使用了far關鍵字;
      在large模式下函數定義和變量定義模認使用了far關鍵字;
      在huge模式下函數定義模認使用了far關鍵字,變量定義默認使用了huge關鍵字。

      near、far、huge關鍵字的真正含義是什么?這三個關鍵字只能用于修飾函數、全局變量和指針變量,對于非指針類型的局部變量,這些關鍵字沒有實際意義。
      當這三個關鍵字用于修飾函數時,huge的含義與far相同,用于指明該函數的調用方式為far調用方式,即調用時需要一個段值和一個段偏移組成的32bits調用地址,使用far

call進行跳轉,跳轉前先壓棧保存當前CS:IP。near修飾函數時,用于指明該函數的調用方式為near調用方式,調用時先壓棧保存當前IP,需要一個16bits的近地址,即當前CS的段

內偏移。

      當這三個關鍵字用于修飾指針時,near型指針實質上為16bits的無符號整型數,該整數給出了所指向變量在當前數據段內的偏移地址,也就是說,在使用near型指針尋址時

實際上是進行如下的尋址操作:[DS:指針變量值]。對于far型的指針變量,可以尋址1MB地址空間的任意一個地方,far型指針的實質是一個32bits的整型數,高16bits為段值,低

16bits為段內偏移,Turbo C中在使用far型指針時,會先將高16bits放入ES寄存器中,然后再進行如下的尋址操作:[ES:指針變量低16bits值]。對于hug型的指針變量,與far型指

針變量的不同之處在于,在對far型指針變量進行+/++/-/--等操作時,far型指針變量保持段值不變(也就是高16bits),而只對段內偏移進行加減操作,所以會出現段內回繞的現

象,而huge型的指針,在進行加減操作時將會自動的改變段值,不會出現段內回繞。所以給人的感覺就是huge指針能比far指針尋址更大的內存空間。

      對于局部變量,由于是創(chuàng)建在堆棧上,所以near、far等關鍵字將不具備任何意義,因為創(chuàng)建在堆棧上的變量的尋址方式就只有一種,即使用sp和bp維護函數堆棧,利用

bp+/-一個偏移來尋址函數參數變量和局部變量。這樣的尋址方式是固定而唯一的,near和far等關鍵字都派不上用場,這里的near和far將沒有任何的實際含義。

      對于使用near、far和huge修飾的全局變量的含義也很容易理解了。near型的全局變量,被分配到了當前的數據段上,尋址這個變量只需要一個16bits的偏移量,而far型全

局變量在尋址時,需要給出段值和偏移量。huge型數組可以使用大于64K的內存空間。

      far、near、huge型指針變量之間的相互轉換,從小尺寸的指針到大尺寸的指針將進行自動的類型轉換,轉換方式為加上當前的DS形成32bits的指針。從大尺寸的指針到小尺

寸的指針需要進行強制類型轉換,轉換的結果為只保留低16bits,但是這樣俄轉換沒有實際的意義或者說用處不大,并且極其容易引入內存訪問的錯誤,所以要嚴格避免使用。

論壇徽章:
2
程序設計版塊每日發(fā)帖之星
日期:2015-06-17 22:20:00每日論壇發(fā)貼之星
日期:2015-06-17 22:20:00
40 [報告]
發(fā)表于 2010-10-19 09:27 |只看該作者
提示: 作者被禁止或刪除 內容自動屏蔽
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復

  

北京盛拓優(yōu)訊信息技術有限公司. 版權所有 京ICP備16024965號-6 北京市公安局海淀分局網監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯網協會會員  聯系我們:huangweiwei@itpub.net
感謝所有關心和支持過ChinaUnix的朋友們 轉載本站內容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP