成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Rust模式:使用Box::leak創(chuàng)建一個(gè)&'static引用

開(kāi)發(fā) 前端
代碼仍然與我們的原始代碼非常相似,但是現(xiàn)在我們的UsersService和OrdersService只嵌入一個(gè)指針大小的引用,并且運(yùn)行時(shí)開(kāi)銷(xiāo)正好為0。?

假設(shè)你有這個(gè)Config結(jié)構(gòu)體,它在程序啟動(dòng)時(shí)加載一次,然后在整個(gè)生命周期中都是不可變的。

問(wèn)題是,Config需要被程序的許多部分訪(fǎng)問(wèn):

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被嵌入到兩個(gè)結(jié)構(gòu)體中,這可能不是理想的,因?yàn)檫@兩個(gè)結(jié)構(gòu)體將隨著Config的大小而增長(zhǎng),而它們可能只需要訪(fǎng)問(wèn)1或2個(gè)字段。

一個(gè)好的選擇是使用智能指針:Rc或Arc,這樣我們就可以共享Config的引用。因?yàn)槲覀兊某绦蚴嵌嗑€(xiàn)程的(就像現(xiàn)在的大多數(shù)程序一樣),我們將使用Arc指針,這樣我們的結(jié)構(gòu)就可以在線(xiàn)程之間發(fā)送:

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只嵌入了一個(gè)Arc指針,這只增加了8個(gè)字節(jié)。

是否能做得更好呢?對(duì)于在程序的整個(gè)生命周期中都是不可變的數(shù)據(jù),最好使用&'static引用。

但是如何創(chuàng)建&'static引用的Config,在運(yùn)行時(shí)加載?

請(qǐng)使用Box::leak,它在堆上分配內(nèi)部結(jié)構(gòu)體(這里是Config),并將引用“泄漏”到'static的生命周期。

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());

代碼仍然與我們的原始代碼非常相似,但是現(xiàn)在我們的UsersService和OrdersService只嵌入一個(gè)指針大小的引用,并且運(yùn)行時(shí)開(kāi)銷(xiāo)正好為0。

責(zé)任編輯:武曉燕 來(lái)源: coding到燈火闌珊
相關(guān)推薦

2023-07-11 13:34:19

Rust開(kāi)發(fā)軟件

2015-04-20 10:06:37

PHP Rust 創(chuàng)建PHP 擴(kuò)展

2023-12-11 11:56:24

圖片服務(wù)器Rust

2012-04-19 17:42:46

Titanium布局

2024-06-07 08:59:35

2025-02-27 00:00:15

2023-04-18 08:14:27

ElixirRustWebRTC

2019-09-23 15:06:29

JavaScipio ERP在線(xiàn)商店

2023-11-03 11:57:04

2021-05-30 07:59:00

String引用類(lèi)型

2016-03-08 09:52:22

xcode插件開(kāi)發(fā)

2009-07-23 16:21:07

static變量ASP.NET

2022-04-10 23:02:08

GoRust語(yǔ)言

2024-02-27 07:33:32

搜索引擎Rust模型

2018-04-27 16:00:15

Windows上帝模式

2021-01-03 16:30:34

Rust編程語(yǔ)言

2021-07-06 14:36:05

RustLinux內(nèi)核模塊

2019-07-16 16:05:51

PythonScribusRGB

2020-09-01 20:53:26

DocsifyGitHub Page文檔網(wǎng)站

2024-04-01 08:18:52

CSSHTMLWeb
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 羞视频在线观看 | 国产精品精品久久久 | 一区二区三区免费 | 日本三级网址 | 国产91视频一区二区 | www.日韩系列 | 99爱在线免费观看 | 538在线精品 | 成人日韩 | 国产精品久久久久久久久久免费看 | 亚洲看片 | 久久成人18免费网站 | 亚洲欧美中文字幕在线观看 | 久久国产精品久久久久久久久久 | 中文字幕在线三区 | 国产精品乱码一区二三区小蝌蚪 | 国产福利精品一区 | 91福利在线观看视频 | h网站在线观看 | 91成人免费看片 | 国产午夜精品一区二区三区四区 | 一区二区三区中文字幕 | 欧美日韩三级 | 午夜免费在线电影 | 午夜欧美 | 成人日韩精品 | 伊人操 | 黄色国产 | 日韩一区二区在线看 | 亚洲欧美激情四射 | avav在线看 | 欧美又大粗又爽又黄大片视频 | 国产高潮好爽受不了了夜色 | 国产丝袜一区二区三区免费视频 | 成年人在线 | 国产精品久久久久久福利一牛影视 | 综合精品在线 | 91玖玖| 国产精品成人一区二区三区 | 日韩精品一区二区三区在线观看 | 国产精品爱久久久久久久 |