rust內存優化

背景

在 Rust 中,repr 是一個屬性(attribute),用于指定數據類型在內存中的布局和表現形式
repr 屬性可以用于枚舉、結構體和聯合體的定義,以控制它們的內部表示方式
repr 屬性有多個選項,每個選項對應于一種不同的布局方式

常見的選項包括:

  • C
    將類型按照 C 語言的規則進行布局和對齊。默認的 repr 屬性選項。
  • transparent
    將新類型(Newtype)與其內部類型具有相同的內存布局,沒有額外的內存開銷
  • usize、u8、u16、u32、u64、u128
    指定整數類型的具體大小和表示形式
  • packed
    無對齊的緊密壓縮布局,沒有填充字節
  • align(n)
    指定對齊方式為 n 字節對齊,其中 n 是 2 的次冪
#[repr(C)]
struct MyStruct {// 結構體字段
}#[repr(transparent)]
struct Newtype(i32);#[repr(packed)]
struct PackedStruct {// 結構體字段
}enum MyEnum {Variant1,#[repr(u8)]Variant2(u8),
}union MyUnion {field1: u8,field2: u32,
}

使用不同的 repr 屬性選項,來指定不同類型的布局和表示形式
結構體 MyStruct 使用了默認的 C 表示方式
新類型 Newtype 使用了 transparent 表示方式
結構體 PackedStruct 使用了 packed 表示方式
枚舉 MyEnum 的 Variant2 使用了 u8 表示方式
聯合體 MyUnion 沒有指定具體的 repr 屬性

通過使用 repr 屬性,可以控制數據類型在內存中的布局方式,
這對于與外部代碼的交互、內存對齊、硬件訪問等場景非常有用
需要謹慎使用 repr 屬性,并根據具體的需求選擇適當的選項
了解 Rust 的表示屬性可以更好地控制數據的內存布局和對齊方式

將新類型(Newtype)與其內部類型具有相同的內存布局?

希望定義一個新類型來提供更好的類型安全性/表示特定的語義,但又不想引入額外的內存開銷
通過使用 #[repr(transparent)] 屬性,確保新類型與其內部類型的內存布局完全相同
即沒有任何額外的包裝或填充字節
對于在代碼中傳遞特定類型的參數、避免不必要的包裝和解包以及與其它代碼進行互操作性非常有用

#[repr(transparent)]
struct Newtype(i32);

Newtype 的新類型,內部包含了一個 i32 類型的字段
告訴編譯器新類型 Newtype 的大小和對齊方式與 i32 完全相同

注意
#[repr(transparent)] 屬性只適用于具有單個字段的新類型
且該字段的類型和新類型的類型必須是安全的(即無內部可變性和其他危險的屬性)

介紹

對于不帶標記的數據結構,默認 repr
repr 代表 rust 可以任意優化內存布局,對內部數據進行重排
保證其內部空間盡量緊湊,不包含過多的 padding

struct Rust {
#![feature(offset_of)]use std::mem;struct Rust {a: u64,b: bool,c: u64,d: bool,
}fn main() {dbg!(mem::size_of::<Rust>());dbg!(mem::offset_of!(Rust, a));dbg!(mem::offset_of!(Rust, b));dbg!(mem::offset_of!(Rust, c));dbg!(mem::offset_of!(Rust, d));
}

在不帶 repr? 時,rust 會對其中的 field 進行重排

[src/main.rs:13] mem::size_of::<Rust>() = 24
[src/main.rs:14] mem::offset_of!(Rust, a) = 

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/163565.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/163565.shtml
英文地址,請注明出處:http://en.pswp.cn/news/163565.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

3D人臉掃描設備助力企業家數字人復刻,打破商業邊界

京都薇薇推出數字人VN&#xff0c;以京都薇薇董事長為原型制作&#xff0c;賦能品牌直播、短片宣傳、線上面診等活動&#xff0c;進一步增強消費者對品牌的交互體驗&#xff0c;把元宇宙與品牌相融合&#xff0c;推動品牌線上服務與線下服務實現數字一體化&#xff0c;打造一個…

「X」Embedding in NLP|一文讀懂 2023 年最流行的 20 個 NLP 模型

在上一篇文章中&#xff0c;我們已經科普了什么是自然語言處理&#xff08;NLP&#xff09;、常見用例及其與向量數據庫的結合。今天&#xff0c;依然是「X」Embedding in NLP 系列專題&#xff0c;本文為初階第二篇&#xff0c;我們將深入介紹在 2023 年爆火的大語言模型 NLP …

小白也看的懂的爬取視頻操作

1.獲取一段視頻 可以直接從抖音下&#xff0c;也可以從b站上爬取&#xff08;注意法律謝謝&#xff09; 保護原創 b站的視頻 直接復制網址鏈接到嗶哩嗶哩(bilibili)視頻解析下載 - 保存B站視頻到手機、電腦 去就好了&#xff0c;

Docker的入門

Docker的入門 防火墻Docker的命令鏡像相關的命令運行容器容器相關的命令 Docker作為一個軟件集裝箱化平臺&#xff0c;可以讓開發者構建應用程序時&#xff0c;將它與其依賴環境一起打包到一個容器中&#xff0c;然后很容易地發布和應用到任意平臺中。 docker有3大核心&#xf…

如何弱化市場大環境帶來的影響?私域電商和裂變營銷引來新趨勢!

弱化市場大環境帶來的影響需要從多個方面入手&#xff0c;包括深入了解市場和行業、建立品牌優勢、多元化經營、優化供應鏈管理、加強客戶關系管理、靈活應對市場變化等。同時需要注意不同領域和行業的市場變化和政策調整&#xff0c;及時調整經營策略和業務結構&#xff0c;保…

WPF實戰項目十七(客戶端):數據等待加載彈框動畫

1、在Common文件夾下新建文件夾Events,新建擴展類UpdateLoadingEvent public class UpdateModel {public bool IsOpen { get; set; }}internal class UpdateLoadingEvent : PubSubEvent<UpdateModel>{} 2、新建一個靜態擴展類DialogExtensions來編寫注冊和推送等待消息…

獲取ip屬地(ip2region本地離線包-超簡單)

背景 最近有涉及要顯示ip屬地&#xff0c;但我想白嫖&#xff0c;結果就是白嫖的api接口太慢了&#xff0c;要延遲3到4秒左右&#xff0c;很影響體驗&#xff0c;而且不一定穩定。 結果突然看到了這個【ip2region】開源項目&#xff0c;離線識別ip屬地&#xff0c;精度自己測…

Public Key Retrieval is not allowed

出現這個錯誤的原因可能是 MySQL 連接配置中的某些設置限制了公鑰的檢索。要解決這個問題&#xff0c;可以嘗試以下方法&#xff1a; 設置參數&#xff1a;在 MySQL 連接 URL 或連接配置中添加參數 ?allowPublicKeyRetrievaltrue?。 更新 MySQL 驅動程序&#xff1a;如果您使…

編譯安裝報錯:configure: error: cannot guess build type; you must specify one

1、編譯安裝報錯 configure: error: cannot guess build type; you must specify one 該報錯信息翻過過來的意思是&#xff1a;無法猜測編譯 操作系統類型,請指定一個 2、解決方法 在原本的編譯安裝語句后面加上一句&#xff1a; “--buildarm-linux ” &#xff0c;這句話…

詳解開源數據庫審計平臺Yearning

基本概念 數據庫審計&#xff08;簡稱DBAudit&#xff09;能夠實時記錄網絡上的數據庫活動&#xff0c;對數據庫操作進行細粒度審計的合規性管理&#xff0c;對數據庫遭受到的風險行為進行告警&#xff0c;對攻擊行為進行阻斷。它通過對用戶訪問數據庫行為的記錄、分析和匯報&…

無人智能貨柜:提升購物體驗

無人智能貨柜&#xff1a;提升購物體驗 隨著移動支付的普及&#xff0c;人們日常生活中的主要場景已經滲透了這一支付方式。同時&#xff0c;無人智能貨柜作為購物的重要渠道&#xff0c;正在嶄露頭角。通過人工智能、圖像識別和物聯網技術的應用&#xff0c;無人智能貨柜將使購…

什么是復費率電表?

隨著科技的不斷進步和人們對能源管理的日益重視&#xff0c;復費率電表逐漸成為我國電力系統中不可或缺的一員。復費率電表是一種能夠實現電能計量、峰谷電價劃分以及負荷控制等多功能的智能電表&#xff0c;它采用先進的通信技術和計算機算法&#xff0c;對用戶的用電行為進行…

nginx.conf 配置文件 詳細解釋

文章目錄 nginx.conf 是 Nginx 的主要配置文件&#xff0c;其中可以配置許多模塊來定義服務器行為。以下是一些常見的 Nginx 模塊以及它們的作用&#xff1a;1. **http 模塊**&#xff1a;2. **server 模塊**&#xff1a;3. **location 模塊**&#xff1a;4. **events 模塊**&a…

軟件系統測試有哪些測試流程?系統測試報告編寫注意事項

在軟件開發的過程中&#xff0c;系統測試是至關重要的一環&#xff0c;它的目的是驗證和評估軟件產品是否符合預期的質量標準&#xff0c;以確保系統的穩定性、可靠性和安全性。 一、軟件系統測試的測試流程 1、需求分析與測試計劃制定&#xff1a;根據需求分析確定測試目標、…

軟件開發及交付的項目管理角色

在軟件開發及交付過程中&#xff0c;通常會涉及不同的角色和職責&#xff0c;包括業務角色、技術角色和管理角色。這些角色在項目管理中發揮著不同的作用&#xff0c;以確保項目的成功和交付高質量的產品。 業務角色&#xff1a;包括產品經理、業務分析師和業務運營人員等職位…

外貿電商網站用什么服務器好?

外貿電商網站用什么服務器好&#xff1f; 電商網站選好域名后&#xff0c;接著就是為網站選擇一個好的網站服務器&#xff0c;截止2015年初&#xff0c;國內站長中約有三百多萬的網站存放在美國服務器&#xff0c;美國服務器為什么會有如此之多的用戶選擇使用呢&#xff0c;站…

張弛聲音變現課,青春劇配音實用攻略

在為青春劇添聲時&#xff0c;配音藝術家須要捕獲并傳達劇中年輕角色的活潑精神、成長道路上的激情&#xff0c;以及他們在面對友情、愛情和理想時的情緒起伏。青春劇特別關注年輕人的成長故事&#xff0c;著重描繪他們在成長中的經歷和變化。下面是一些為青春劇配音的建議&…

TP5制作圖片壓縮包

目標:將多張圖片制成在一個壓縮包內,供調取使用 public function test() {//引入壓縮包類$zip new \ZipArchive();//新定義一個zip包$zipname ROOT_PATH./public/zip/.date("YmdHis").rand(111,999)..zip;if ($zip->open($zipname, \ZipArchive::CREATE) true…

2023年跨界融合創新應用合作發展大會-核心PPT資料下載

一、峰會簡介 本次大會主題為“創新地理信息價值 服務數字中國建設”。1天主論壇和6場專題論壇的報告&#xff0c;圍繞主題深入探討地理信息產業與相關重要應用領域的跨界融合和深化合作。 本屆大會將搭建地理信息產業與旅游、林業、環保、氣象、住建、水利、農業農村、電力等…

數據報文去哪兒了

背景 今天遇到一個詭異的現象&#xff0c;當接口附加一個IP時&#xff0c;主IP業務正常&#xff0c;附加IP死活不行&#xff0c;tcpdump抓包確可以正常抓到到業務的報文&#xff0c;但是在PREROUTING raw添加規則確沒有命中&#xff0c;說明報文沒有到netfilter框架內&#xff…