日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

「字符串」存在「棧內存」?那我可要杠你了哦!

來源: 責編: 時間:2024-03-27 17:39:54 180觀看
導讀前言大家好,我是林三心,用最通俗易懂的話講最難的知識點是我的座右銘,基礎是進階的前提是我的初心。在我們的認知里:基礎類型存棧內存,引用數據類型存堆內存。const a = '林三心'const b = { age: 18, height: 180}

前言

大家好,我是林三心,用最通俗易懂的話講最難的知識點是我的座右銘,基礎是進階的前提是我的初心。Nrw28資訊網——每日最新資訊28at.com

在我們的認知里:基礎類型存棧內存,引用數據類型存堆內存。Nrw28資訊網——每日最新資訊28at.com

const a = '林三心'const b = {    age: 18,    height: 180}

圖片圖片Nrw28資訊網——每日最新資訊28at.com

超長字符串

大家都知道,字符串屬于基礎類型,所以大家會覺得字符串是存在棧內存中的,但是大家要知道,V8默認棧內存是984Kib,那如果一個超長字符串 > 984Kib能裝的進棧內存嗎?這也就是一個比較經典的問題——大象裝箱問題,試問:一頭大象能裝進一個小箱子里嗎?Nrw28資訊網——每日最新資訊28at.com

圖片圖片Nrw28資訊網——每日最新資訊28at.com

一探究竟

堆快照

先來看一段代碼Nrw28資訊網——每日最新資訊28at.com

const func = function() {  this.str1 = '林三心'  this.str2 = 'Sunshine_Lin'}const a = new func()const b = new func()

然后咱們來看看堆快照的詳情Nrw28資訊網——每日最新資訊28at.com

圖片圖片Nrw28資訊網——每日最新資訊28at.com

上面的結果可以看出:Nrw28資訊網——每日最新資訊28at.com

  • a 和 b的str1都指向同一個地址
  • a 和 b的str2都指向同一個地址

那我們可不可以猜測出一個結論:字符串的內容存于堆內存中,指針存于棧內存中,且相同的字符串指向同一個堆內存地址Nrw28資訊網——每日最新資訊28at.com

修改和新增字符串

我們稍微修改下代碼Nrw28資訊網——每日最新資訊28at.com

const func = function() {  this.str1 = '林三心'  this.str2 = 'Sunshine_Lin'}const a = new func()const b = new func()// 修改str1a.str1 = '哈哈哈哈哈哈哈哈哈哈'// 新增str3,跟str2一樣a.str3 = 'Sunshine_Lin'

再來看看現階段的堆快照的詳情Nrw28資訊網——每日最新資訊28at.com

圖片圖片Nrw28資訊網——每日最新資訊28at.com

上面的結果可以看出:Nrw28資訊網——每日最新資訊28at.com

  • str1修改成一個新的字符串后,重新開辟了一個內存空間(新地址)
  • str3新增之后,指針指向已有的Sunshine_Lin的內存空間

那我們可不可以猜測出一個結論:新增或者修改字符串后,如果是一個之前不存在的字符串,則新開辟內存空間,如果是已有的,則直接使用已有的內存空間Nrw28資訊網——每日最新資訊28at.com

源碼分析

當我們聲明一個字符串時:Nrw28資訊網——每日最新資訊28at.com

  • 1、v8內部有一個名為stringTable的hashmap緩存了所有字符串,在V8閱讀我們的代碼,轉換抽象語法樹時,每遇到一個字符串,會根據其特征換算為一個hash值,插入到hashmap中。在之后如果遇到了hash值一致的字符串,會優先從里面取出來進行比對,一致的話就不會生成新字符串類。
  • 2、緩存字符串時,根據字符串不同采取不同hash方式。

圖片圖片Nrw28資訊網——每日最新資訊28at.com

源碼

圖片圖片Nrw28資訊網——每日最新資訊28at.com

圖片圖片Nrw28資訊網——每日最新資訊28at.com

通俗易懂總結

字符串的數據存于 堆內存 中,棧內存 中只是存其 地址指針Nrw28資訊網——每日最新資訊28at.com

當我們新建一個字符串時,V8會從內存中查找一下是否已經有存在的一樣的字符串,找到的話直接復用。如果找不到的話,則開辟一塊新的內存空間來存這個字符串,并把地址賦給變量。Nrw28資訊網——每日最新資訊28at.com

大家有沒有想過,為什么字符串不能通過下標索引來進行修改呢?因為字符串的修改本質上只能是通過整個的修改,而不能局部修改。Nrw28資訊網——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-79841-0.html「字符串」存在「棧內存」?那我可要杠你了哦!

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: ZGC可伸縮低延遲垃圾收集器深度解析

下一篇: 聊聊Flink:這次把Flink的觸發器(Trigger)、移除器(Evictor)講透

標簽:
  • 熱門焦點
  • 直屏旗艦來了 iQOO 12和K70 Pro同臺競技

    旗艦機基本上使用的都是雙曲面屏幕,這就讓很多喜歡直屏的愛好者在苦等一款直屏旗艦,這次,你們等到了。據博主數碼閑聊站帶來的最新爆料稱,Redmi下代旗艦K70 Pro和iQOO 12兩款手
  • 2023年Q2用戶偏好榜:12+256G版本成新主流

    3月份的性能榜、性價比榜和好評榜之后,就要輪到2023年的第二季度偏好榜了,上半年的新機潮已經過去,最明顯的肯定就是大內存和存儲的機型了,另外部分中端機也取消了屏幕塑料支架
  • 5月iOS設備好評榜:iPhone 14僅排第43?

    來到新的一月,安兔兔的各個榜單又重新匯總了數據,像安卓陣營的榜單都有著比較大的變動,不過iOS由于設備的更新換代并沒有那么快,所以相對來說變化并不大,特別是iOS好評榜,老款設
  • 線程通訊的三種方法!通俗易懂

    線程通信是指多個線程之間通過某種機制進行協調和交互,例如,線程等待和通知機制就是線程通訊的主要手段之一。 在 Java 中,線程等待和通知的實現手段有以下幾種方式:Object 類下
  • CSS單標簽實現轉轉logo

    轉轉品牌升級后更新了全新的Logo,今天我們用純CSS來實現轉轉的新Logo,為了有一定的挑戰性,這里我們只使用一個標簽實現,將最大化的使用CSS能力完成Logo的繪制與動畫效果。新logo
  • 谷歌KDD'23工作:如何提升推薦系統Ranking模型訓練穩定性

    谷歌在KDD 2023發表了一篇工作,探索了推薦系統ranking模型的訓練穩定性問題,分析了造成訓練穩定性存在問題的潛在原因,以及現有的一些提升模型穩定性方法的不足,并提出了一種新
  • 2納米決戰2025

    集微網報道 從三強爭霸到四雄逐鹿,2nm的廝殺聲已然隱約傳來。無論是老牌勁旅臺積電、三星,還是誓言重回先進制程領先地位的英特爾,甚至初成立不久的新
  • iQOO Neo8系列新品發布會

    旗艦雙芯 更強更Pro
  • 三翼鳥智能家居亮相電博會,讓用戶體驗更真實

    2021電博會在青島國際會展中心開幕中,三翼鳥直接把“家”搬到了現場,成為了展會的一大看點。這也是三翼鳥繼9月9日發布了行業首個一站式定制智慧家平臺后的
Top 主站蜘蛛池模板: 许昌市| 楚雄市| 元江| 都昌县| 会宁县| 米易县| 紫金县| 建瓯市| 乐平市| 壶关县| 乡宁县| 松江区| 丰原市| 石狮市| 连州市| 绥化市| 灵石县| 四会市| 德阳市| 鄢陵县| 从化市| 剑河县| 咸阳市| 张家口市| 绵阳市| 清丰县| 陇南市| 繁峙县| 搜索| 遂平县| 临颍县| 宁陵县| 夏河县| 迭部县| 漳州市| 陆丰市| 新巴尔虎左旗| 雅安市| 靖边县| 隆德县| 会同县|