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

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

Rust模式:使用Box::leak創建一個&'static引用

來源: 責編: 時間:2024-07-10 17:58:46 760觀看
導讀假設你有這個Config結構體,它在程序啟動時加載一次,然后在整個生命周期中都是不可變的。問題是,Config需要被程序的許多部分訪問:struct UsersService { config: Config,}struct OrdersService { config: Config,}/

假設你有這個Config結構體,它在程序啟動時加載一次,然后在整個生命周期中都是不可變的。Dju28資訊網——每日最新資訊28at.com

問題是,Config需要被程序的許多部分訪問:Dju28資訊網——每日最新資訊28at.com

struct UsersService {    config: Config,}struct OrdersService {    config: Config,}// ...let config = config::load()?;let users_service = UsersService::new(config.clone());let orders_service = OrdersService::new(config.clone());

在上面的代碼中,Config被嵌入到兩個結構體中,這可能不是理想的,因為這兩個結構體將隨著Config的大小而增長,而它們可能只需要訪問1或2個字段。Dju28資訊網——每日最新資訊28at.com

一個好的選擇是使用智能指針:Rc或Arc,這樣我們就可以共享Config的引用。因為我們的程序是多線程的(就像現在的大多數程序一樣),我們將使用Arc指針,這樣我們的結構就可以在線程之間發送:Dju28資訊網——每日最新資訊28at.com

struct UsersService {    config: Arc<Config>,}struct OrdersService {    config: Arc<Config>,}// ...let config = Arc::new(config::load()?);let users_service = UsersService::new(config.clone());let orders_service = OrdersService::new(config.clone());

這里,UsersService和OrdersService只嵌入了一個Arc指針,這只增加了8個字節。Dju28資訊網——每日最新資訊28at.com

是否能做得更好呢?對于在程序的整個生命周期中都是不可變的數據,最好使用&'static引用。Dju28資訊網——每日最新資訊28at.com

但是如何創建&'static引用的Config,在運行時加載?Dju28資訊網——每日最新資訊28at.com

請使用Box::leak,它在堆上分配內部結構體(這里是Config),并將引用“泄漏”到'static的生命周期。Dju28資訊網——每日最新資訊28at.com

struct UsersService {    config: Arc<Config>,}struct OrdersService {    config: Arc<Config>,}// ...let config = Arc::new(config::load()?);let users_service = UsersService::new(config.clone());let orders_service = OrdersService::new(config.clone());

代碼仍然與我們的原始代碼非常相似,但是現在我們的UsersService和OrdersService只嵌入一個指針大小的引用,并且運行時開銷正好為0。Dju28資訊網——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-100192-0.htmlRust模式:使用Box::leak創建一個&amp;'static引用

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

上一篇: Stream很好,Map很酷,但答應我別用toMap()

下一篇: Vue3 中異步接口請求是放在組件內部,還是放在Pinia中?

標簽:
  • 熱門焦點
  • K60至尊版狂暴引擎2.0加持:超177萬跑分斬獲性能第一

    Redmi的后性能時代戰略發布會今天下午如期舉辦,在本次發布會上,Redmi公布了多項關于和聯發科的深度合作,以及新機K60 Ultra在軟件和硬件方面的特性,例如:“K60 至尊版,雙芯旗艦
  • 6月安卓手機好評榜:魅族20 Pro蟬聯冠軍

    性能榜和性價比榜之后,我們來看最后的安卓手機好評榜,數據來源安兔兔評測,收集時間2023年6月1日至6月30日,僅限國內市場。第一名:魅族20 Pro好評率:95%5月份的時候魅族20 Pro就是
  • 6月安卓手機性能榜:vivo/iQOO霸占旗艦排行榜前三

    2023年上半年已經正式過去了,我們也迎來了安兔兔V10版本,在新的驍龍8Gen3和天璣9300發布之前,性能榜的榜單大體會以驍龍8Gen2和天璣9200+為主,至于那顆3.36GHz的驍龍8Gen2領先
  • Flowable工作流引擎的科普與實踐

    一.引言當我們在日常工作和業務中需要進行各種審批流程時,可能會面臨一系列技術和業務上的挑戰。手動處理這些審批流程可能會導致開發成本的增加以及業務復雜度的上升。在這
  • 多線程開發帶來的問題與解決方法

    使用多線程主要會帶來以下幾個問題:(一)線程安全問題  線程安全問題指的是在某一線程從開始訪問到結束訪問某一數據期間,該數據被其他的線程所修改,那么對于當前線程而言,該線程
  • 雅柏威士忌多款單品價格大跌,泥煤頂流也不香了?

    來源 | 烈酒商業觀察編 | 肖海林今年以來,威士忌市場開始出現了降溫跡象,越來越多不斷暴漲的網紅威士忌也開始悄然回歸市場理性。近日,LVMH集團旗下蘇格蘭威士忌品牌雅柏(Ardbeg
  • 自律,給不了Keep自由!

    來源 | 互聯網品牌官作者 | 李大為編排 | 又耳 審核 | 谷曉輝自律能不能給用戶自由暫時不好說,但大概率不能給Keep自由。近日,全球最大的在線健身平臺Keep正式登陸港交所,努力
  • AMD的AI芯片轉單給三星可能性不大 與臺積電已合作至2nm制程

    據 DIGITIMES 消息,英偉達 AI GPU 出貨逐季飆升,接下來 AMD MI 300 系列將在第 4 季底量產。而半導體業內人士表示,近日傳出 AMD 的 AI 芯片將轉單給
  • 蘋果140W USB-C充電器:采用氮化鎵技術

    據10 月 30 日 9to5 Mac 消息報道,當蘋果推出新的 MacBook Pro 2021 時,該公司還推出了新的 140W USB-C 充電器,附贈在 MacBook Pro 16 英寸機型的盒子里,也支
Top 主站蜘蛛池模板: 抚远县| 璧山县| 佛冈县| 南投县| 安岳县| 东至县| 卓资县| 邛崃市| 云安县| 淮安市| 江川县| 波密县| 涿鹿县| 义马市| 景德镇市| 鹤峰县| 雷波县| 临沭县| 蓬安县| 都江堰市| 华亭县| 吴江市| 海南省| 凤翔县| 汨罗市| 娄底市| 宜宾县| 微博| 新宾| 新郑市| 连南| 泽州县| 赤壁市| 湛江市| 平邑县| 哈巴河县| 禹州市| 奈曼旗| 宝丰县| 读书| 江都市|