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

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

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

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

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

問題是,Config需要被程序的許多部分訪問:XUN28資訊網——每日最新資訊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個字段。XUN28資訊網——每日最新資訊28at.com

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

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

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

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

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

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

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

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

標簽:
  • 熱門焦點
Top 主站蜘蛛池模板: 错那县| 民权县| 鹤峰县| 芜湖县| 大埔县| 兴宁市| 河源市| 弥渡县| 蒙山县| 石河子市| 错那县| 大名县| 上栗县| 肇州县| 永顺县| 北川| 盖州市| 湛江市| 静海县| 扎赉特旗| 通河县| 枣庄市| 商洛市| 鹤庆县| 百色市| 大连市| 开封县| 余江县| 社旗县| 泉州市| 富裕县| 河南省| 武城县| 齐齐哈尔市| 吕梁市| 大姚县| 安丘市| 丹江口市| 客服| 荆州市| 卢氏县|