国产在线导航,欧美日本中文,黄色在线观看网站永久免费乱码,chinese国产在线视频,亚洲欧洲第一视频,天天做人人爱夜夜爽2020毛片,亚洲欧美中文字幕在线网站

現(xiàn)在位置:范文先生網(wǎng)>理工論文>計(jì)算機(jī)信息技術(shù)>在C++中實(shí)現(xiàn)JAVA的存儲(chǔ)管理機(jī)制

在C++中實(shí)現(xiàn)JAVA的存儲(chǔ)管理機(jī)制

時(shí)間:2023-02-21 00:10:06 計(jì)算機(jī)信息技術(shù) 我要投稿
  • 相關(guān)推薦

在C++中實(shí)現(xiàn)JAVA的存儲(chǔ)管理機(jī)制

馮輝寧

南京大學(xué)計(jì)算機(jī)系,210093

關(guān)鍵詞:Java、C++、存儲(chǔ)管理、對(duì)象、指針

眾所周知,JAVA語(yǔ)言最明顯的優(yōu)勢(shì)在于用它設(shè)計(jì)的程序可以廣泛地運(yùn)行于互聯(lián)網(wǎng)上所有安裝了VM解釋器的計(jì)算機(jī)上。然而,如今JAVA之所以在市場(chǎng)上如此流行,還得益于它的另一賣點(diǎn):它提供了安全可靠和使用方便的存儲(chǔ)管理機(jī)制。這是部分編程人員將它與其前身C++語(yǔ)言對(duì)比后所得出的結(jié)論。本文將針對(duì)兩種語(yǔ)言的內(nèi)存(以對(duì)象為單位)使用機(jī)制,通過(guò)從靈活性、易用性和效率三個(gè)方面的比較,來(lái)證明這樣一個(gè)事實(shí):在C++中可以實(shí)現(xiàn)與JAVA一樣的存儲(chǔ)管理機(jī)制。

 

一、JAVA對(duì)象是C++對(duì)象和指針二者的繼承

JAVA作為C++的后繼,在內(nèi)存分配和對(duì)象使用上與之有很大的相似之處。請(qǐng)看下面的比較:

1

操作

JAVA

C++

指針使用

非指針使用

聲明

ObjectClass Instance

ObjectClass* Instance

ObjectClass Instance

創(chuàng)建

Instance=new ObjectClass()

Instance=new ObjectClass()

聲明時(shí)自動(dòng)創(chuàng)建

數(shù)據(jù)訪問(wèn)

Instance.Data

Instance->Data

Instance.Data

方法調(diào)用

Instance.Method()

Instance->Method()

Instance.Method()

復(fù)制

指針復(fù)制

Instance1=Instance2

Instance1=Instance2

不提供

內(nèi)容復(fù)制

由類自身定義

不提供

缺省,或由類自身定義

比較

指針比較

Instance1==Instance2

Instance1==Instance2

不提供

內(nèi)容比較

由類自身定義

不提供

缺省,或由類自身定義

銷毀

不再引用時(shí)由垃圾收集器自動(dòng)銷毀

delete Instance

超出作用域時(shí)自動(dòng)銷毀

注:    ① C++的“指針使用”一列中并未列出形如*Instance的使用,因?yàn)檫@樣做的實(shí)質(zhì)不是指針使用;

           ②“指針復(fù)制”是指使得兩個(gè)對(duì)象今后使用相同的一塊內(nèi)存區(qū)域,任何對(duì)此區(qū)域的修改同時(shí)會(huì)反映到這兩個(gè)對(duì)象上;

            ③“內(nèi)容復(fù)制”則指拷貝兩個(gè)對(duì)象各自的存儲(chǔ)區(qū)域,拷貝后內(nèi)容相同,但各自保留自己的存儲(chǔ)區(qū),以后對(duì)任一者的修改不會(huì)影響另一者。

1

從上表可以看出,除了對(duì)象銷毀機(jī)制以外,JAVA的對(duì)象其實(shí)是從C++中的對(duì)象和指針共同繼承而來(lái)的。

但是,很多極力提倡JAVA語(yǔ)言的人似乎沒(méi)有意識(shí)到這種關(guān)系。他們批評(píng)C++指針的概念太難被初學(xué)者接受。的確,對(duì)初學(xué)者來(lái)說(shuō),接受計(jì)算機(jī)存儲(chǔ)器和指針的概念并不是輕而易舉的事。事實(shí)上,很多程序員都經(jīng)歷過(guò)這樣一個(gè)迷惘的階段。但這并不意味著存在一種對(duì)存儲(chǔ)器的解釋可以完全避免“指針”這一概念——在JAVA語(yǔ)言中也是如此。現(xiàn)在有很多講解JAVA語(yǔ)言的教材,但真正能夠從頭到尾不出現(xiàn)“指針”或者類似概念(不包括抨擊C++語(yǔ)言時(shí)的使用)的,又有幾本呢?

特別地,JAVA初學(xué)者由于理解的障礙,經(jīng)常提出像這樣的問(wèn)題:“為什么像int、float這樣的變量使用前不需要先用new命令來(lái)創(chuàng)建而對(duì)象卻要呢?為什么兩個(gè)對(duì)象互相復(fù)制以后,修改其中一個(gè)會(huì)影響另一個(gè),而像int、float這樣的基本數(shù)據(jù)類型卻不會(huì)呢??jī)蓚(gè)值相等的對(duì)象,用==比較的結(jié)果為什么是false,它們有什么是不等呢……”面對(duì)這樣的問(wèn)題,即使許多對(duì)JAVA比較熟悉的人有時(shí)也說(shuō)不出個(gè)所以然來(lái)。究其原因,就是JAVA中的對(duì)象從來(lái)就沒(méi)有離開(kāi)C++指針的影子,特別是在創(chuàng)建、復(fù)制(事實(shí)上,JAVA默認(rèn)時(shí)只提供指針復(fù)制)和比較等最常用的操作上。因而使用它們就必須遵循指針的規(guī)則,否則將無(wú)法為計(jì)算機(jī)或編程者所理解。在C++中,指針和對(duì)象其實(shí)是與int、float共通的數(shù)據(jù)類型,但又各有其特性;繼承到JAVA中以后,二者的特性互相糅合而融為一體,因此對(duì)其含義的問(wèn)題就產(chǎn)生模棱兩可的解釋:JAVA對(duì)象有時(shí)是對(duì)象,有時(shí)是指針,但大多數(shù)時(shí)候是指針。

對(duì)C++指針的另一種批評(píng)指出,C++允許指針指向任意內(nèi)存區(qū)域,因此容易引起系統(tǒng)的干擾,即使很有經(jīng)驗(yàn)的程序員在使用時(shí)也難免產(chǎn)生疏忽。這種批評(píng)不無(wú)道理,因?yàn)榇蟛糠諧++程序出錯(cuò)的原因都與指針有關(guān)。但由此而批評(píng)指針存在的價(jià)值是不對(duì)的。沒(méi)有C++程序員愿意從不使用指針。指針是程序設(shè)計(jì)的一樣利器,凡涉及內(nèi)存的操作,沒(méi)有指針不能做到的,并且它的效率比其他任何替代方法都高。這就是眾多C++程序員寧愿冒著高度的出錯(cuò)風(fēng)險(xiǎn)也堅(jiān)持使用指針的最大原因,而并不是他們無(wú)法避免使用指針。如果真正要像JAVA語(yǔ)言那樣刻意避免指針的話,筆者在后面可以證明,只要他們?cè)敢,在C++程序員同樣可以做到,而且性能比JAVA更好。他們可以設(shè)計(jì)一類徹頭徹尾的C++對(duì)象,而他們的使用方法卻與JAVA對(duì)象


【在C++中實(shí)現(xiàn)JAVA的存儲(chǔ)管理機(jī)制】相關(guān)文章:

在C 中實(shí)現(xiàn)JAVA的存儲(chǔ)管理機(jī)制08-09

ARM7系統(tǒng)中實(shí)現(xiàn)CF卡存儲(chǔ)的文件系統(tǒng)設(shè)計(jì)08-06

存儲(chǔ)器類型綜述及DDR接口設(shè)計(jì)的實(shí)現(xiàn)08-06

一種簡(jiǎn)易數(shù)字波形存儲(chǔ)器的實(shí)現(xiàn)08-06

一種專用高速硬盤(pán)存儲(chǔ)設(shè)備的設(shè)計(jì)與實(shí)現(xiàn)08-06

基于WWW的協(xié)同式CAI軟件的Java實(shí)現(xiàn)08-06

基于WWW的協(xié)同式CAI軟件的Java實(shí)現(xiàn)08-06

利用FPGA實(shí)現(xiàn)模式可變的衛(wèi)星數(shù)據(jù)存儲(chǔ)器糾錯(cuò)系統(tǒng)08-06

基于閃存的星載大容量存儲(chǔ)器的研究和實(shí)現(xiàn)08-06