54. c++中的堆與棧內(nèi)存的比較

應(yīng)該也差不多了往史,雖然我沒有深入到,它是如何在操作系統(tǒng)層面上工作的佛舱。

不能連續(xù)地一幀一幀地分配椎例,因為這很慢。

我們會在現(xiàn)實中學(xué)習(xí)更多關(guān)于分配的知識以及如何最小化分配(的開銷)请祖。

我們很可能會討論更多關(guān)于CPU 緩存優(yōu)化的內(nèi)容订歪,如果你正在編寫一個包含100萬個元素的集合务热,然后每個元素都會cache miss级及,你會看到一個非常真實的性能差異。如果你所有東西都是連續(xù)的或者碎片的矢否。

實際的訪問 cpu慎陵、緩存 通逞凼可以忽略不計,是通常席纽,但不是總是捏悬。

當(dāng)你調(diào)用new 時,你需要檢查空閑列表润梯,請存內(nèi)存过牙,然后記錄這些。

你要從預(yù)先分配的4gb 內(nèi)存塊中進行對分配纺铭,但他們miss 的數(shù)量 可能不夠造成麻煩寇钉,你唯一可能要處理的是 緩存不命中 問題 cpu cache miss 的問題。

所以理論上講舶赔,如果你預(yù)先分配扫倡,然后你要從預(yù)先分配的4gb 內(nèi)存塊中進行堆分配,

或者你特別需要更多的數(shù)據(jù)竟纳,比如我想加載一個紋理撵溃,這就不適合在棧上分配,你應(yīng)該總在棧上分配蚁袭,性能的不同是因為分配的不同征懈。

在堆上分配的唯一原因,是你不能夠在堆上分配揩悄,事實上,你應(yīng)該盡可能在棧上分配鬼悠,如果可能的話删性。

然后顯然要去到空閑列表亏娜,去檢查我們是否有足夠的內(nèi)存,然后記錄已經(jīng)被拿走了多少內(nèi)存蹬挺,有多少已經(jīng)被分配了维贺?

這是我們堆上的分配,這里調(diào)用構(gòu)造函數(shù)巴帮,它調(diào)用了整個操作符new溯泣,new操作又調(diào)用了malloc.

這是一條cpu指令,放入特定的偏移量的棧指針榕茧。

我們將 assembly output 選成assembly with source code.

按下ctrl+ F7 來進行編譯垃沦,你可能不會注意到區(qū)別,因為你沒有足夠多的cache misses用押,導(dǎo)致出現(xiàn)問題肢簿。

因為你不斷在訪問,棧上的東西是活躍的蜻拨,就像你把函數(shù)放到棧上池充,把東西放到寄存器里,諸如此類缎讼。

事實上收夸,棧上的內(nèi)存距離更近,但是如果只有少量的cache misses 你沒法對這個觀點進行爭論血崭。一些cache misses 對比沒有 cache misses.?

但是如果我們處理數(shù)百萬的 cache misses咱圆,這就是大問題了。

訪問的數(shù)據(jù)在Cache中功氨,稱為hit序苏,反之則稱為“Miss” 。相比之下捷凄,在棧中分配忱详,可能不會得到cache miss.

在我們請求第一個棧上變量之后,

在堆上分配內(nèi)存是一堆的事情跺涤,潛在的成本是巨大的匈睁。

因此它們可以放到cpu 緩存線上(cache line 可理解為 CPU Cache 中的最小緩存單位。)

你的程序需要詢問你的操作系統(tǒng)桶错,我需要更多的內(nèi)存航唆。

超過了操作系統(tǒng)給你的初始分配,超過了空閑列表院刁,

這樣做通常會調(diào)用底層操作系統(tǒng)或平臺的特定函數(shù)糯钙。

你的程序會維護一個叫做空閑列表(free list)的東西。

一條Cpu的刪除指令 就可以釋放所有東西,不需要將棧指針反向移動 然后 返回棧指針地址任岸。

一個叫做malloc 的函數(shù)再榄,memory allocate 的縮寫。

釋放的意思是享潜,釋放內(nèi)存沒有任何開銷困鸥。

delete harray 加上一個數(shù)字操作符[]

內(nèi)存實際上是相互疊加存儲的,棧是倒著來的剑按,是第一個變量value疾就,int value,存儲在更高地址上艺蝴。

它實際上只是添加了安全守衛(wèi)(safety guards)猬腰,以確保我們不會溢出所有的變量。

cccc 在debug模式下吴趴,是說我們還沒有初始化這個value漆诽。

棧通常是一個預(yù)定義大小的內(nèi)存區(qū)域,通常為2兆字節(jié)左右锣枝。

在日志系統(tǒng)或者其他使用場景下厢拭。


















最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市撇叁,隨后出現(xiàn)的幾起案子供鸠,更是在濱河造成了極大的恐慌,老刑警劉巖陨闹,帶你破解...
    沈念sama閱讀 221,273評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件楞捂,死亡現(xiàn)場離奇詭異,居然都是意外死亡趋厉,警方通過查閱死者的電腦和手機寨闹,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,349評論 3 398
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來君账,“玉大人繁堡,你說我怎么就攤上這事∠缡” “怎么了椭蹄?”我有些...
    開封第一講書人閱讀 167,709評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長净赴。 經(jīng)常有香客問我绳矩,道長,這世上最難降的妖魔是什么玖翅? 我笑而不...
    開封第一講書人閱讀 59,520評論 1 296
  • 正文 為了忘掉前任翼馆,我火速辦了婚禮割以,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘写妥。我一直安慰自己拳球,他們只是感情好审姓,可當(dāng)我...
    茶點故事閱讀 68,515評論 6 397
  • 文/花漫 我一把揭開白布珍特。 她就那樣靜靜地躺著,像睡著了一般魔吐。 火紅的嫁衣襯著肌膚如雪扎筒。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,158評論 1 308
  • 那天酬姆,我揣著相機與錄音嗜桌,去河邊找鬼。 笑死辞色,一個胖子當(dāng)著我的面吹牛骨宠,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播相满,決...
    沈念sama閱讀 40,755評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼层亿,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了立美?” 一聲冷哼從身側(cè)響起匿又,我...
    開封第一講書人閱讀 39,660評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎建蹄,沒想到半個月后碌更,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,203評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡洞慎,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,287評論 3 340
  • 正文 我和宋清朗相戀三年痛单,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片劲腿。...
    茶點故事閱讀 40,427評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡旭绒,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出谆棱,到底是詐尸還是另有隱情快压,我是刑警寧澤,帶...
    沈念sama閱讀 36,122評論 5 349
  • 正文 年R本政府宣布垃瞧,位于F島的核電站蔫劣,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏个从。R本人自食惡果不足惜脉幢,卻給世界環(huán)境...
    茶點故事閱讀 41,801評論 3 333
  • 文/蒙蒙 一歪沃、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧嫌松,春花似錦沪曙、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,272評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至贾陷,卻和暖如春缘眶,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背髓废。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評論 1 272
  • 我被黑心中介騙來泰國打工巷懈, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人慌洪。 一個月前我還...
    沈念sama閱讀 48,808評論 3 376
  • 正文 我出身青樓顶燕,卻偏偏與公主長得像,于是被迫代替她去往敵國和親冈爹。 傳聞我的和親對象是個殘疾皇子涌攻,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,440評論 2 359

推薦閱讀更多精彩內(nèi)容

  • 夜鶯2517閱讀 127,724評論 1 9
  • 我是黑夜里大雨紛飛的人啊 1 “又到一年六月,有人笑有人哭犯助,有人歡樂有人憂愁癣漆,有人驚喜有人失落,有的覺得收獲滿滿有...
    陌忘宇閱讀 8,540評論 28 53
  • 兔子雖然是枚小碩 但學(xué)校的碩士四人寢不夠 就被分到了博士樓里 兩人一間 在學(xué)校的最西邊 靠山 兔子的室友身體不好 ...
    待業(yè)的兔子閱讀 2,607評論 2 9
  • 信任包括信任自己和信任他人 很多時候剂买,很多事情惠爽,失敗、遺憾瞬哼、錯過婚肆,源于不自信,不信任他人 覺得自己做不成坐慰,別人做不...
    吳氵晃閱讀 6,191評論 4 8