色噜噜狠狠成人网_好男人社区神马在线观看www_亚洲国产成人精品女人久久久_日本特黄aaaaaaa大片

千鋒教育-做有情懷、有良心、有品質(zhì)的職業(yè)教育機(jī)構(gòu)

當(dāng)前位置:首頁(yè)  >  關(guān)于學(xué)院  >  技術(shù)干貨  >  Java技術(shù)干貨  >  正文

C++、java都將線程共享的變量等放到堆內(nèi)存中,為什么選擇堆這種數(shù)據(jù)結(jié)構(gòu)?

來(lái)源:千鋒教育
發(fā)布時(shí)間:2023-10-10 20:55:07
分享

一、C++、java為什么選擇堆這種數(shù)據(jù)結(jié)構(gòu)

效率:執(zhí)行堆排序所需的時(shí)間呈對(duì)數(shù)增長(zhǎng),而其他算法可能隨著要排序的元素?cái)?shù)量的增加而呈指數(shù)級(jí)增長(zhǎng)。這種排序算法非常有效。

內(nèi)存使用: 內(nèi)存使用是最小的,因?yàn)槌吮4嬉判虻脑氐某跏剂斜硭匦璧臇|西之外,它不需要額外的內(nèi)存空間來(lái)工作

簡(jiǎn)單性: 它比其他同樣有效的排序算法更容易理解,因?yàn)樗皇褂孟冗M(jìn)的計(jì)算機(jī)科學(xué)概念,如遞歸。

堆排序(HeapSort)基本概念

堆排序是一種基于二叉堆(binary heap)數(shù)據(jù)結(jié)構(gòu)的基于比較的排序技術(shù)。它類似于選擇排序,先找到最小的元素,然后把最小的元素放在最開始, 然后對(duì)其余元素重復(fù)相同的過(guò)程。

堆的介紹詳見數(shù)據(jù)結(jié)構(gòu)–Heap介紹及Java代碼的實(shí)現(xiàn)示例

由于二叉堆是一棵完整的二叉樹,所以它可以很容易地表示為數(shù)組,而基于數(shù)組的表示方式非常節(jié)省空間。如果父節(jié)點(diǎn)存儲(chǔ)在索引I,左邊的子節(jié)點(diǎn)可以用2 * I + 1計(jì)算,右邊的子節(jié)點(diǎn)可以用2 * I + 2計(jì)算(假設(shè)索引從0開始)。

堆排序是一種in-place算法,排序后,相同的元素?zé)o法保證相對(duì)的順序,即是不穩(wěn)定的。

延伸閱讀:

二、堆和棧的不同

1、分配方式不同:

棧: 由系統(tǒng)自動(dòng)分配。 例如,聲明在函數(shù)中一個(gè)局部變量 int b; 系統(tǒng)自動(dòng)在棧中為b開辟空間

堆: 需要程序員自己申請(qǐng),并指明大小,在c中malloc函數(shù)

如p1 = (char *)malloc(10);

在C++中用new運(yùn)算符

如p2 = (char *)new(10);

但是注意p1、p2本身是在棧中的。

2、空間大小不同:

一般來(lái)講在32位系統(tǒng)下,堆內(nèi)存可以達(dá)到4G的空間,從這個(gè)角度來(lái)看堆內(nèi)存幾乎是沒(méi)有什么限制的。但是對(duì)于棧來(lái)講,一般都是有一定的空間大小的,例如,在VC6下面,默認(rèn)的棧空間大小是1M。

3、分配效率不同:

棧是機(jī)器系統(tǒng)提供的數(shù)據(jù)結(jié)構(gòu),計(jì)算機(jī)會(huì)在底層對(duì)棧提供支持:分配專門的寄存器存放棧的地址,壓棧出棧都有專門的指令執(zhí) 行,這就決定了棧的效率比較高。堆則是C/C++函數(shù)庫(kù)提供的,它的機(jī)制是很復(fù)雜的,例如為了分配一塊內(nèi)存,庫(kù)函數(shù)會(huì)按照一定的算法(具體的算法可以參考 數(shù)據(jù)結(jié)構(gòu)/操作系統(tǒng))在堆內(nèi)存中搜索可用的足夠大小的空間,如果沒(méi)有足夠大小的空間(可能是由于內(nèi)存碎片太多),就有可能調(diào)用系統(tǒng)功能去增加程序數(shù)據(jù)段的 內(nèi)存空間,這樣就有機(jī)會(huì)分到足夠大小的內(nèi)存,然后進(jìn)行返回。顯然,堆的效率比棧要低得多。

4、碎片問(wèn)題:

棧:只要棧的剩余空間大于所申請(qǐng)空間,系統(tǒng)將為程序提供內(nèi)存,否則將報(bào)異常提示棧溢出。

堆:首先應(yīng)該知道操作系統(tǒng)有一個(gè)記錄空閑內(nèi)存地址的鏈表,當(dāng)系統(tǒng)收到程序的申請(qǐng)時(shí),

會(huì)遍歷該鏈表,尋找名列前茅個(gè)空間大于所申請(qǐng)空間的堆結(jié)點(diǎn),然后將該結(jié)點(diǎn)從空閑結(jié)點(diǎn)鏈表中刪除,并將該結(jié)點(diǎn)的空間分配給程序,另外,對(duì)于大多數(shù)系統(tǒng),會(huì)在這塊 內(nèi)存空間中的首地址處記錄本次分配的大小,這樣,代碼中的delete語(yǔ)句才能正確的釋放本內(nèi)存空間。另外,由于找到的堆結(jié)點(diǎn)的大小不一定正好等于申請(qǐng)的 大小,系統(tǒng)會(huì)自動(dòng)的將多余的那部分重新放入空閑鏈表中。

對(duì)于堆來(lái)講,頻繁的new/delete勢(shì)必會(huì)造成內(nèi)存空間的不連續(xù),從而造成大量的碎片,使程序效率降低。對(duì)于棧來(lái)講,則不會(huì)存在這個(gè)問(wèn)題,因?yàn)闂J窍冗M(jìn)后出的隊(duì)列,他們是如此的一一對(duì)應(yīng),以至于永遠(yuǎn)都不可能有一個(gè)內(nèi)存塊從棧中間彈出,在他彈出之前,在他上面的后進(jìn)的棧內(nèi)容已經(jīng)被彈出。

5、生長(zhǎng)方向:

對(duì)于堆來(lái)講,生長(zhǎng)方向是向上的,也就是向著內(nèi)存地址增加的方向;對(duì)于棧來(lái)講,它的生長(zhǎng)方向是向下的,是向著內(nèi)存地址減小的方向增長(zhǎng)。

堆和棧相比,由于大量new/delete的使用,容易造成大量的內(nèi)存碎片;由于沒(méi)有專門的系統(tǒng)支持,效率很低;由于可能引發(fā)用戶態(tài)和核心態(tài)的切換,內(nèi)存的申請(qǐng),代價(jià)變得更加昂貴。所以棧在程序中是應(yīng)用較廣泛的,就算是函數(shù)的調(diào)用也利用棧去完成,函數(shù)調(diào)用過(guò)程中的參數(shù),返回地址,EBP和局部變量都采用棧的方式存放。所以,我們推薦大家盡量用棧,而不是用堆。雖然棧有如此眾多的好處,但是由于和堆相比不是那么靈活,有時(shí)候分配大量的內(nèi)存空間,還是用堆好一些。

聲明:本站稿件版權(quán)均屬千鋒教育所有,未經(jīng)許可不得擅自轉(zhuǎn)載。

學(xué)習(xí)資源站

  • 免費(fèi)全套視頻教程
  • 企業(yè)實(shí)戰(zhàn)項(xiàng)目源碼
  • 大廠筆試真題題庫(kù)
  • 行業(yè)前瞻發(fā)展趨勢(shì)

相關(guān)推薦

  • javaoa系統(tǒng)有哪些模塊? 一、權(quán)限管理模塊權(quán)限管理模塊是Java OA系統(tǒng)的核心模塊之一,也是整個(gè)系統(tǒng)的基礎(chǔ)。該模塊通過(guò)對(duì)系統(tǒng)用戶進(jìn)行身份驗(yàn)證、權(quán)限分配、訪問(wèn)控制等管理,確保了系統(tǒng)的安全性和穩(wěn)定性。權(quán)限管理模塊通常包括用戶管理
  • Java中遍歷數(shù)據(jù)結(jié)構(gòu)Enumeration和Iterator相比有什么不同? 一、Java中遍歷數(shù)據(jù)結(jié)構(gòu)Enumeration和Iterator的不同1、功能和用法不同 Enumeration是Java早期版本中引入的接口,它只有兩個(gè)方法:hasMoreElements()和n
  • 為什么JavaScript絕大多數(shù)內(nèi)置函數(shù)都是native code? 一、JavaScript絕大多數(shù)內(nèi)置函數(shù)都是native code的原因1、提高程序執(zhí)行效率首先,內(nèi)置函數(shù)作為引擎內(nèi)部的一部分,可以提高JavaScript程序的執(zhí)行效率。這是因?yàn)?,?nèi)置函數(shù)的實(shí)現(xiàn)是直
  • C、C++、Java、JavaScript、PHP、Python、Ruby 這些語(yǔ)言分別主要用來(lái)開發(fā)什么? 一、C、C++、Java、JavaScript、PHP、Python、Ruby 的用途C主要用于底層模塊,服務(wù)應(yīng)用和嵌入式應(yīng)用;C++主要用于上層服務(wù)程序,應(yīng)用API,大型3D游戲;Java主要用于服
  • C++、java都將線程共享的變量等放到堆內(nèi)存中,為什么選擇堆這種數(shù)據(jù)結(jié)構(gòu)? 一、C++、java為什么選擇堆這種數(shù)據(jù)結(jié)構(gòu)效率:執(zhí)行堆排序所需的時(shí)間呈對(duì)數(shù)增長(zhǎng),而其他算法可能隨著要排序的元素?cái)?shù)量的增加而呈指數(shù)級(jí)增長(zhǎng)。這種排序算法非常有效。內(nèi)存使用: 內(nèi)存使用是最小的,因?yàn)槌吮?/a>
  • Java 的作用是什么? 一、Java 的作用1、跨平臺(tái)Java的跨平臺(tái)特性是其最大的優(yōu)勢(shì)之一,因?yàn)镴ava代碼可以在各種不同操作系統(tǒng)和硬件平臺(tái)上運(yùn)行,這是因?yàn)镴ava程序通過(guò)Java虛擬機(jī)(JVM)來(lái)執(zhí)行,JVM將Java代
  • 色噜噜狠狠成人网_好男人社区神马在线观看www_亚洲国产成人精品女人久久久_日本特黄aaaaaaa大片

    9000px;">

    亚洲国产一区二区在线播放| 国产一区二区三区久久久| 日韩极品在线观看| 国产美女视频一区| 在线观看中文字幕不卡| 337p日本欧洲亚洲大胆精品| 一卡二卡三卡日韩欧美| 国产精品一品视频| 欧美日韩国产区一| 亚洲三级免费电影| 黄色成人免费在线| 欧美精品少妇一区二区三区 | 国产精品一区一区| 欧美日韩和欧美的一区二区| 国产日韩亚洲欧美综合| 日韩电影免费一区| 成人一区二区三区中文字幕| 日韩午夜电影av| 亚洲综合在线电影| 国产精品白丝jk黑袜喷水| 91精品国产91久久综合桃花| 亚洲精选一二三| 成人国产视频在线观看| 久久久国产一区二区三区四区小说| 亚洲h在线观看| 日本大香伊一区二区三区| 亚洲国产精品精华液ab| 国产精品18久久久久久久久| 欧美一区二区三区在线电影| 亚洲电影中文字幕在线观看| 色噜噜狠狠色综合中国| ...xxx性欧美| 91啪亚洲精品| 亚洲欧美日韩国产成人精品影院 | 91在线观看视频| 欧美高清在线视频| 国产成人自拍高清视频在线免费播放| 日韩精品中文字幕一区| 毛片一区二区三区| 精品免费国产一区二区三区四区| 日韩精品福利网| 欧美精品第1页| 免费高清视频精品| 日韩欧美一区二区三区在线| 日韩成人av影视| 2023国产精品自拍| 国产成人精品综合在线观看 | 午夜精品爽啪视频| 欧美一区二区二区| 久久99深爱久久99精品| 精品国偷自产国产一区| 国产精品一区二区久久不卡 | 久久久天堂av| 成人av网站免费| 一区二区视频免费在线观看| 在线免费观看日本欧美| 亚洲国产精品影院| 日韩丝袜情趣美女图片| 国产精品一区二区91| 日韩毛片在线免费观看| 欧美日韩一区二区不卡| 精一区二区三区| 国产欧美日韩综合| 色综合一个色综合亚洲| 视频一区视频二区中文| 国产亚洲一二三区| 色综合久久88色综合天天免费| 亚洲第一会所有码转帖| 日韩欧美二区三区| 成人黄色小视频| 天天亚洲美女在线视频| 久久精品一区二区三区四区| 日本高清不卡一区| 国产美女一区二区| 亚洲成av人片在线| 欧美激情综合五月色丁香| 欧美日韩亚州综合| 国产成人99久久亚洲综合精品| 亚洲综合另类小说| 国产亚洲精品超碰| 欧美日韩亚州综合| 97超碰欧美中文字幕| 国产在线精品不卡| 亚洲国产精品精华液网站 | 91精品免费观看| av爱爱亚洲一区| 免费不卡在线观看| 亚洲午夜免费福利视频| 中文字幕av不卡| 欧美电影免费观看高清完整版在线| 91在线小视频| 国产99久久精品| 捆绑调教美女网站视频一区| 亚洲激情一二三区| 国产精品久久久久久久岛一牛影视| 日韩精品一区二区三区中文不卡| 91美女在线视频| 国产69精品久久99不卡| 奇米影视一区二区三区小说| 一级精品视频在线观看宜春院| 久久精品夜色噜噜亚洲a∨| 欧美一区三区四区| 欧美在线免费播放| 色婷婷久久一区二区三区麻豆| 国产精品综合在线视频| 九色综合狠狠综合久久| 日韩在线a电影| 石原莉奈在线亚洲三区| 亚洲国产日韩a在线播放| 亚洲视频1区2区| 国产精品全国免费观看高清| 国产亚洲一本大道中文在线| 亚洲精品一区二区三区香蕉| 日韩欧美在线不卡| 日韩美女在线视频| 日韩欧美一二区| 欧美成人福利视频| 精品日韩在线观看| 久久久五月婷婷| 国产人妖乱国产精品人妖| 2017欧美狠狠色| 国产欧美一区二区三区网站| 国产三级三级三级精品8ⅰ区| 国产亚洲欧美在线| 国产精品成人免费在线| 亚洲人成在线观看一区二区| 亚洲天堂精品视频| 亚洲小说欧美激情另类| 日韩高清国产一区在线| 久久er精品视频| 成人做爰69片免费看网站| 成人av一区二区三区| 欧洲亚洲国产日韩| 欧美制服丝袜第一页| 4438x成人网最大色成网站| 欧美一卡2卡3卡4卡| 久久精品一区八戒影视| 国产精品电影一区二区三区| 一区二区三区高清不卡| 亚洲成人1区2区| 国产在线一区观看| av亚洲精华国产精华精华| 97超碰欧美中文字幕| 欧美精品久久一区| 久久久久国色av免费看影院| 中文字幕的久久| 亚洲成人久久影院| 国内精品免费**视频| 91麻豆免费观看| 精品国一区二区三区| 亚洲三级免费电影| 久久精品理论片| 94-欧美-setu| 欧美成人女星排名| 一区二区久久久久| 国产在线一区观看| 欧美日韩三级视频| 日本一区免费视频| 美国欧美日韩国产在线播放| 成人国产精品视频| 欧美一级一级性生活免费录像| 中文字幕在线不卡一区| 三级在线观看一区二区 | 欧美一区二区福利视频| 亚洲视频每日更新| 国产在线播放一区| 欧美性淫爽ww久久久久无| 精品福利一区二区三区 | 国产精品电影一区二区| 另类调教123区| 欧美手机在线视频| 国产精品午夜久久| 久久99久国产精品黄毛片色诱| 91免费观看视频在线| 国产视频视频一区| 精品一区二区三区在线观看国产| 91福利在线免费观看| 中文无字幕一区二区三区| 蜜桃一区二区三区在线| 在线免费一区三区| 日韩理论电影院| 成人精品鲁一区一区二区| 日韩欧美国产麻豆| 免费在线观看精品| 3d动漫精品啪啪| 日韩在线一二三区| 69精品人人人人| 免费av网站大全久久| 欧美精品第1页| 午夜精品aaa| 欧美久久免费观看| 偷偷要91色婷婷| 欧美亚洲愉拍一区二区| 亚洲综合另类小说| 欧美日韩专区在线| 亚洲国产视频直播| 欧美日韩精品欧美日韩精品 | 亚洲女人的天堂| 91麻豆精品视频| 亚洲精品国产一区二区精华液 |