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

Rust優(yōu)于C++的兩個(gè)原因 ?

開(kāi)發(fā) 前端
運(yùn)行時(shí)類(lèi)型信息(RTTI),RTTI意味著在運(yùn)行時(shí)執(zhí)行動(dòng)態(tài)類(lèi)型檢查和類(lèi)型轉(zhuǎn)換。當(dāng)啟用RTTI時(shí),編譯器在二進(jìn)制文件中包含額外的元數(shù)據(jù)以支持動(dòng)態(tài)類(lèi)型信息。

盡管學(xué)習(xí)曲線陡峭,Rust已經(jīng)證明了自己是一門(mén)值得掌握的語(yǔ)言。今天,讓我們深入研究一下Rust優(yōu)于C++語(yǔ)言的原因。

原因1:積極的編譯器優(yōu)化

  • Rust的編譯器(LLVM)比C++編譯器更積極地優(yōu)化代碼,這是因?yàn)樗袡?quán)規(guī)則,LLVM可以做出假設(shè)。
  • LLVM在內(nèi)聯(lián)函數(shù)方面更加積極,特別是對(duì)于小函數(shù)。內(nèi)聯(lián)避免了函數(shù)調(diào)用開(kāi)銷(xiāo)并使其快速。

例如,下面的函數(shù)可能會(huì)或可能不會(huì)被C++編譯器內(nèi)聯(lián),但LLVM肯定會(huì)內(nèi)聯(lián)它。

fn f(n: i32, dp: &mut Vec<i32>) -> i32 {
    let n1 = n as usize;
    if dp[n1] != -1 {
        return dp[n1];
    }
    dp[n1] = Self::f(n-1, dp) + Self::f(n-2, dp) + Self::f(n-3, dp);
    dp[n1]
}

原因2:較低的運(yùn)行時(shí)開(kāi)銷(xiāo)

1,C++棧展開(kāi)導(dǎo)致運(yùn)行緩慢

什么是棧展開(kāi)?

每當(dāng)拋出異常時(shí),在棧上開(kāi)始分配資源和調(diào)用對(duì)象的析構(gòu)函數(shù)的過(guò)程,這稱(chēng)為棧展開(kāi)。

class Resource {
public:
    Resource() {
        std::cout << "Resource acquired\n";
    }

    ~Resource() {
        std::cout << "Resource released\n";
    }
};

void foo() {
    Resource res; // Resource acquired
    throw std::runtime_error("Error in foo");
}

int main() {
    try {
        foo();
    } catch (const std::runtime_error& e) {
        std::cerr << "Caught exception: " << e.what() << std::endl;
    }
    return 0;
}

棧展開(kāi)是如何工作的?

  • 調(diào)用foo()時(shí),它獲取一個(gè)Resource對(duì)象。
  • 然后拋出std::runtime_error異常。
  • 作為結(jié)果,棧開(kāi)始展開(kāi),并調(diào)用res的析構(gòu)函數(shù)來(lái)釋放Resource。
  • 然后,在main()函數(shù)中捕獲異常。
  • 這確保了即使在出現(xiàn)異常的情況下也能正確地清理資源。

棧展開(kāi)有運(yùn)行時(shí)開(kāi)銷(xiāo),當(dāng)存在深度嵌套的函數(shù)調(diào)用或具有復(fù)雜析構(gòu)函數(shù)的對(duì)象時(shí),將花費(fèi)時(shí)間來(lái)釋放對(duì)象。

2,Rust使用Result和Option類(lèi)型刪除了的棧展開(kāi)

Rust的Result和Option類(lèi)型用于錯(cuò)誤處理,通過(guò)模式匹配而不是異常來(lái)處理。

fn divide(a: i32, b: i32) -> Result {
    if b == 0 {
        return Err("Division by zero");
    }
    Ok(a / b)
}

fn main() {
    match divide(10, 0) {
        Ok(result) => println!("Result: {}", result),
        Err(e) => eprintln!("Error: {}", e),
    }
}

3,C++運(yùn)行時(shí)類(lèi)型信息(RTTI)增加了二進(jìn)制大小和運(yùn)行時(shí)開(kāi)銷(xiāo)

增加二進(jìn)制大小:

運(yùn)行時(shí)類(lèi)型信息(RTTI),RTTI意味著在運(yùn)行時(shí)執(zhí)行動(dòng)態(tài)類(lèi)型檢查和類(lèi)型轉(zhuǎn)換。當(dāng)啟用RTTI時(shí),編譯器在二進(jìn)制文件中包含額外的元數(shù)據(jù)以支持動(dòng)態(tài)類(lèi)型信息。

這些元數(shù)據(jù)通常包括:類(lèi)型信息表(類(lèi)型描述符)、用于動(dòng)態(tài)調(diào)度等的虛函數(shù)表(vtable)。這些表增加了二進(jìn)制文件的大小,特別是對(duì)于具有大量多態(tài)類(lèi)的程序。

增加執(zhí)行時(shí)間:

動(dòng)態(tài)強(qiáng)制轉(zhuǎn)換(dynamic_cast),這包括運(yùn)行時(shí)類(lèi)型檢查,以確保轉(zhuǎn)換的正確性。這種類(lèi)型檢查增加了程序執(zhí)行時(shí)間的開(kāi)銷(xiāo)。

虛函數(shù)調(diào)用,C++語(yǔ)言中的動(dòng)態(tài)多態(tài)性適用于虛函數(shù)調(diào)用,這需要在運(yùn)行時(shí)查找適當(dāng)?shù)暮瘮?shù)。與靜態(tài)調(diào)度相比,會(huì)產(chǎn)生額外的運(yùn)行時(shí)開(kāi)銷(xiāo)。

#include <iostream>
#include <typeinfo>

class Base {
public:
    virtual ~Base() {}
};

class Derived : public Base {};

int main() {
    Base* ptr = new Derived();
    Derived* derived = dynamic_cast(ptr);
    if (derived) {
        std::cout << "Dynamic cast successful\n";
    } else {
        std::cout << "Dynamic cast failed\n";
    }
    delete ptr;
    return 0;
}

4,Rust中沒(méi)有RTTI ???

Rust的類(lèi)型系統(tǒng)支持多態(tài)行為和動(dòng)態(tài)分派(基于trait和enum),而不需要RTTI。Box啟用動(dòng)態(tài)分派,不需要運(yùn)行時(shí)類(lèi)型信息。

trait Printable {
    fn print(&self);
}

struct Base;
struct Derived;

impl Printable for Base {
    fn print(&self) {
        println!("Base");
    }
}

impl Printable for Derived {
    fn print(&self) {
        println!("Derived");
    }
}

fn main() {
    let base: Box = Box::new(Derived);
    base.print();
}

Rust的編譯器建立在LLVM上,將高級(jí)結(jié)構(gòu)轉(zhuǎn)換為高效的機(jī)器碼。

Rust優(yōu)于C++的這兩個(gè)原因成立嗎???

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

2021-12-06 23:00:36

CC++編程語(yǔ)言

2024-02-26 07:26:27

RustC++開(kāi)發(fā)

2011-07-21 17:11:09

AjaxJSF

2009-06-29 10:09:55

AjaxJSF

2023-03-01 10:20:13

2021-06-16 12:03:49

WindowsLinux游戲

2023-09-21 23:35:19

C++變量

2022-02-21 23:08:50

Kubernetes集群容器

2024-07-26 00:22:34

2022-10-21 18:41:23

RustC++Azure

2009-08-12 16:37:22

C#變量類(lèi)型轉(zhuǎn)換

2024-04-08 18:55:54

RustC++開(kāi)發(fā)

2022-03-25 09:57:18

C++Rust語(yǔ)言

2024-01-22 10:52:45

C++多線程死鎖

2024-06-24 07:00:00

C++RustGo

2022-06-17 09:46:51

Chrome 102Chrome瀏覽器

2009-07-15 18:29:22

Jython應(yīng)用

2010-07-02 12:26:51

LEACH協(xié)議

2020-09-03 07:17:28

Rus微軟C++

2024-01-19 21:55:57

C++編程代碼
點(diǎn)贊
收藏

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

主站蜘蛛池模板: 91视频正在播放 | 男人的天堂在线视频 | 国产日产久久高清欧美一区 | 99热精品久久 | 久久精品欧美一区二区三区不卡 | 欧美一级免费黄色片 | 欧美精品区 | 亚洲欧美日韩电影 | 精品国产一区二区三区性色av | 男人天堂手机在线视频 | 欧美一区二区三区在线视频 | 在线观看亚洲精品视频 | 亚洲国产精品精华素 | 日日夜夜天天久久 | 亚洲精品乱码久久久久久按摩观 | 国产亚洲网站 | 精品视频成人 | 亚洲成人精品一区 | 祝你幸福电影在线观看 | 亚洲综合色网站 | www.日韩欧美| jizz18国产| 国产一区二区在线免费播放 | 色成人免费网站 | 麻豆一区二区三区精品视频 | 在线免费观看视频黄 | 精品二区视频 | 日本久久一区二区三区 | eeuss国产一区二区三区四区 | 久久毛片 | 精品国产欧美一区二区三区不卡 | 一区二区激情 | 日韩欧美在线视频 | 久久久九九 | 成人小视频在线观看 | 一区二区在线不卡 | 日本 欧美 三级 高清 视频 | 日韩精品一区二区三区在线观看 | 91在线一区| 久久久影院 | 四虎影院在线播放 |