欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

Linux中深拷貝與淺拷貝以及寫時(shí)拷貝是什么意思

這篇文章主要講解了“Linux中深拷貝與淺拷貝以及寫時(shí)拷貝是什么意思”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“Linux中深拷貝與淺拷貝以及寫時(shí)拷貝是什么意思”吧!

10年積累的網(wǎng)站設(shè)計(jì)制作、網(wǎng)站建設(shè)經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶對(duì)網(wǎng)站的新想法和需求。提供各種問(wèn)題對(duì)應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先網(wǎng)站制作后付款的網(wǎng)站建設(shè)流程,更有正藍(lán)免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。

假設(shè)B復(fù)制了A,當(dāng)修改A時(shí),看B是否會(huì)發(fā)生變化。如果B也跟著變了,說(shuō)明這是淺拷貝;如果B沒(méi)變,那就是深拷貝。

1、淺拷貝:將原對(duì)象的引用直接賦給新對(duì)象,新對(duì)象只是原對(duì)象的一個(gè)引用。

2、深拷貝:創(chuàng)建一個(gè)新的對(duì)象和數(shù)組,將原對(duì)象的各項(xiàng)屬性的“值”(數(shù)組的所有元素)拷貝過(guò)來(lái),是“值”而不是“引用”。

淺拷貝只是對(duì)指針的拷貝,拷貝后兩個(gè)指針指向同一個(gè)內(nèi)存空間,深拷貝不但對(duì)指針進(jìn)行拷貝,而且對(duì)指針指向的內(nèi)容進(jìn)行拷貝,經(jīng)深拷貝后的指針是指向兩個(gè)不同地址的指針。

3、寫時(shí)復(fù)制技術(shù):最初產(chǎn)生于Unix系統(tǒng),用于實(shí)現(xiàn)一種傻瓜式的進(jìn)程創(chuàng)建:當(dāng)發(fā)出fork(  )系統(tǒng)調(diào)用時(shí),內(nèi)核原樣復(fù)制父進(jìn)程的整個(gè)地址空間并把復(fù)制的那一份分配給子進(jìn)程。這種行為是非常耗時(shí)的,因?yàn)樗枰?/p>

· 為子進(jìn)程的頁(yè)表分配頁(yè)面

· 為子進(jìn)程的頁(yè)分配頁(yè)面

· 初始化子進(jìn)程的頁(yè)表

· 把父進(jìn)程的頁(yè)復(fù)制到子進(jìn)程相應(yīng)的頁(yè)中

創(chuàng)建一個(gè)地址空間的這種方法涉及許多內(nèi)存訪問(wèn),消耗許多CPU周期,并且完全破壞了高速緩存中的內(nèi)容。在大多數(shù)情況下,這樣做常常是毫無(wú)意義的,因?yàn)樵S多子進(jìn)程通過(guò)裝入一個(gè)新的程序開始它們的執(zhí)行,這樣就完全丟棄了所繼承的地址空間。

現(xiàn)在的Unix內(nèi)核(包括Linux),采用一種更為有效的方法稱之為寫時(shí)復(fù)制(或COW)。這種思想相當(dāng)簡(jiǎn)單:父進(jìn)程和子進(jìn)程共享頁(yè)面而不是復(fù)制頁(yè)面。然而,只要頁(yè)面被共享,它們就不能被修改。無(wú)論父進(jìn)程和子進(jìn)程何時(shí)試圖寫一個(gè)共享的頁(yè)面,就產(chǎn)生一個(gè)錯(cuò)誤,這時(shí)內(nèi)核就把這個(gè)頁(yè)復(fù)制到一個(gè)新的頁(yè)面中并標(biāo)記為可寫。原來(lái)的頁(yè)面仍然是寫保護(hù)的:當(dāng)其它進(jìn)程試圖寫入時(shí),內(nèi)核檢查寫進(jìn)程是否是這個(gè)頁(yè)面的唯一屬主;如果是,它把這個(gè)頁(yè)面標(biāo)記為對(duì)這個(gè)進(jìn)程是可寫的。

Linux的fork()使用寫時(shí)復(fù)制

傳統(tǒng)的fork()系統(tǒng)調(diào)用直接把所有的資源復(fù)制給新創(chuàng)建的進(jìn)程。這種實(shí)現(xiàn)過(guò)于簡(jiǎn)單并且效率低下,因?yàn)樗截惖臄?shù)據(jù)或許可以共享。更糟糕的是,如果新進(jìn)程打算立即執(zhí)行一個(gè)新的映像,那么所有的拷貝都將前功盡棄。Linux的fork()使用寫時(shí)拷貝(copy-on-write)頁(yè)實(shí)現(xiàn)。

寫時(shí)拷貝是一種可以推遲甚至避免拷貝數(shù)據(jù)的技術(shù)。內(nèi)核此時(shí)并不復(fù)制整個(gè)進(jìn)程的地址空間,而是讓父子進(jìn)程共享同一個(gè)地址空間。只用在需要寫入的時(shí)候才會(huì)復(fù)制地址空間,從而使各個(gè)進(jìn)行擁有各自的地址空間。也就是說(shuō),資源的復(fù)制是在需要寫入的時(shí)候才會(huì)進(jìn)行,在此之前,只有以只讀方式共享。這種技術(shù)使地址空間上的頁(yè)的拷貝被推遲到實(shí)際發(fā)生寫入的時(shí)候。在頁(yè)根本不會(huì)被寫入的情況下—例如,fork()后立即執(zhí)行exec(),地址空間就無(wú)需被復(fù)制了。fork()的實(shí)際開銷就是復(fù)制父進(jìn)程的頁(yè)表以及給子進(jìn)程創(chuàng)建一個(gè)進(jìn)程描述符。在一般情況下,進(jìn)程創(chuàng)建后都為馬上運(yùn)行一個(gè)可執(zhí)行的文件,這種優(yōu)化,可以避免拷貝大量根本就不會(huì)被使用的數(shù)據(jù)(地址空間里常常包含數(shù)十兆的數(shù)據(jù))。由于Unix強(qiáng)調(diào)進(jìn)程快速執(zhí)行的能力,所以這個(gè)優(yōu)化是很重要的。

感謝各位的閱讀,以上就是“Linux中深拷貝與淺拷貝以及寫時(shí)拷貝是什么意思”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)Linux中深拷貝與淺拷貝以及寫時(shí)拷貝是什么意思這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

本文名稱:Linux中深拷貝與淺拷貝以及寫時(shí)拷貝是什么意思
鏈接地址:http://www.chinadenli.net/article24/iigije.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站內(nèi)鏈Google網(wǎng)站排名全網(wǎng)營(yíng)銷推廣面包屑導(dǎo)航品牌網(wǎng)站設(shè)計(jì)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

微信小程序開發(fā)