国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

C++性能優(yōu)化筆記-6-C++元素的效率差異-7-類型轉(zhuǎn)換

這篇具有很好參考價值的文章主要介紹了C++性能優(yōu)化筆記-6-C++元素的效率差異-7-類型轉(zhuǎn)換。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

類型轉(zhuǎn)換

在C++語法中,有幾種方式進行類型轉(zhuǎn)換:

// Example 7.19
int i; float f;
f = i; 						// Implicit type conversion
f = (float)i; 				// C-style type casting
f = float(i); 				// Constructor-style type casting
f = static_cast<float>(i); 	// C++ casting operator

這些不同的方法有完全相同的效果。使用哪種方法是一個編程風(fēng)格的問題。下邊討論下不同轉(zhuǎn)換的時間損耗。

signed與unsigned轉(zhuǎn)換

。。。
有符號與無符號整數(shù)間的轉(zhuǎn)換只是讓編譯器以不同的方式解釋整數(shù)的比特。不檢查溢出,代碼不需要額外時間。

整數(shù)大小轉(zhuǎn)換

int i; short int s;
i = s;

一個整數(shù)轉(zhuǎn)換成一個位數(shù)更長的整數(shù)時,如果是有符號的,通過擴展符號位,如果是無符號的,通過零擴展。如果是一個算術(shù)表達式的結(jié)果進行,通常需要1時鐘周期。如果從內(nèi)存讀取一個變量的值來轉(zhuǎn)換,通常不需要額外時間,如下:
。。。
將整數(shù)轉(zhuǎn)換到更小的類型僅僅是忽略高位比特,不檢查溢出。例如:
。。。
這個轉(zhuǎn)換不需要額外時間。它只是保存32位整數(shù)的低16位。

浮點精度轉(zhuǎn)換

在使用浮點寄存器棧時,float、double與long double間的轉(zhuǎn)換不需要額外時間。在使用XMM寄存器時,需要2到15時鐘周期(取決于處理器)。例子:

// Example 7.24
float a; double b;
a += b;

在這個例子中,如果使用XMM寄存器,轉(zhuǎn)換是相對低效的。a與b應(yīng)該是相同類型以避免。

整數(shù)到浮點轉(zhuǎn)換

有符號整數(shù)到float或double的轉(zhuǎn)換需要4 ~ 6時鐘周期,取決于處理器與使用的寄存器類型。無符號整數(shù)的轉(zhuǎn)換需要更長時間,除非AVX512指令集可用(AVX512DQ用于64bit無符號整數(shù))。如果沒有溢出的危險,首先把無符號整數(shù)轉(zhuǎn)換到有符號整數(shù)會更快的:
。。。

浮點到整數(shù)轉(zhuǎn)換

浮點值到整數(shù)的轉(zhuǎn)換需要非常長的時間,除非啟用SSE2或更新的指令集。通常,轉(zhuǎn)換需要50 ~ 100時鐘周期。原因是C/C++標準指定截斷,因此浮點取整模式必須改變?yōu)榻財?,再改回來?/p>

如果在代碼的關(guān)鍵部分存在浮點到整數(shù)轉(zhuǎn)換,那么對進行優(yōu)化是重要的??赡艿姆桨赣校?/p>

  • 使用不同類型的變量,避免轉(zhuǎn)換。
  • 將中間結(jié)果保存為浮點類型,將轉(zhuǎn)換移出最里層循環(huán)。
    。。。

指針類型轉(zhuǎn)換

指針可以被轉(zhuǎn)換到另一個類型的指針。類似的,指針可以轉(zhuǎn)換到整數(shù),或者整數(shù)可以轉(zhuǎn)換到指針。整數(shù)有足夠的bit位保存指針是重要的。
這些轉(zhuǎn)換不會產(chǎn)生額外的代碼。它只是以不同的方式解釋相同比特,或者繞過語法檢查。
當然,這些轉(zhuǎn)換不安全。確保結(jié)果有效是程序員的責(zé)任。

重新解釋對象的類型

通過轉(zhuǎn)換地址類型,使編譯器將一個變量或?qū)ο螽斪隽硪粋€類型是可能的:

float x;
*(int*)&x |= 0x80000000;	// Set sign bit of x

這里,語法看起來有些奇怪。x 的地址被類型轉(zhuǎn)換為一個整數(shù)指針,然后通過把x當做整數(shù)訪問。實際上制作一個指針,編譯器不產(chǎn)生任何額外的代碼真正創(chuàng)造一個指針。這個指針只是被優(yōu)化掉,結(jié)果x被處理為一個整數(shù)。但 & 操作符強制編譯器在內(nèi)存而不是寄存器里保存x。上面例子通過使用只能應(yīng)用于整數(shù)的 | 操作符設(shè)置 x 的符號位。它比x = -abs( x );更快。

在類型轉(zhuǎn)換指針時,要小心一些風(fēng)險:

  • 違反嚴格的標準C別名規(guī)則,尤其是不同類型的兩個指針不能指向相同的對象(除了char指針)。優(yōu)化編譯器可能在兩個不同的寄存器中保存浮點與整數(shù)表示。你需要檢查編譯器的行為是否就是你所期望的。使用聯(lián)合更安全。
  • 如果對象被當做比其實際更大的類型對待,該技巧會無效。上面這個代碼將出錯,如果int比float使用更多比特。(在x86系統(tǒng)里,兩者都使用32比特)。
    。。。

const_cast

const_cast用于去除一個指針的const限制。它有一些語法檢查,因此,比C風(fēng)格的類型轉(zhuǎn)換更安全,無需添加任何額外的代碼。例如:
。。。

static_cast

static_cast操作符做的與C形式的類型轉(zhuǎn)換相同。

reinterpret_cast

reinterpret_cast操作符用于指針轉(zhuǎn)換。與c風(fēng)格的轉(zhuǎn)換類似,但會進行一些語法檢查,不產(chǎn)生任何額外的代碼。

dynamic_cast

dynamic_cast操作符用于將一個類指針轉(zhuǎn)換為另一個類的指針。它對轉(zhuǎn)換的有效性進行運行時檢查。例如,在一個基類指針被轉(zhuǎn)換為派生類的指針時,它檢查原始指針是否真的指向派生類的一個對象。這個檢查使得dynamic_cast比簡單的類型轉(zhuǎn)換更耗時些,但也更安全。它可能捕捉到原本沒發(fā)現(xiàn)的編程錯誤。

轉(zhuǎn)換類對象

涉及類對象的轉(zhuǎn)換(而不是對象指針)是看可能的,只要程序員定義了說明如何進行這個轉(zhuǎn)換的一個構(gòu)造函數(shù)、一個重載賦值操作符或一個重載類型轉(zhuǎn)換操作符。構(gòu)造函數(shù)或重載操作符與成員函數(shù)效率相同。

歡迎交流
xmm轉(zhuǎn)換,c++,程序優(yōu)化,c++,性能優(yōu)化文章來源地址http://www.zghlxwxcb.cn/news/detail-775912.html

到了這里,關(guān)于C++性能優(yōu)化筆記-6-C++元素的效率差異-7-類型轉(zhuǎn)換的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • android開發(fā)實戰(zhàn)經(jīng)典,設(shè)計思想與代碼質(zhì)量優(yōu)化+程序性能優(yōu)化+開發(fā)效率優(yōu)化

    android開發(fā)實戰(zhàn)經(jīng)典,設(shè)計思想與代碼質(zhì)量優(yōu)化+程序性能優(yōu)化+開發(fā)效率優(yōu)化

    一、關(guān)于Handler面試那些問題 1、Handler Looper Message 關(guān)系是什么? 2、Messagequeue 的數(shù)據(jù)結(jié)構(gòu)是什么?為什么要用這個數(shù) 據(jù)結(jié)構(gòu)? 3、如何在子線程中創(chuàng)建 Handler? 4、Handler post 方法原理? 5、Android 消息機制的原理及源碼解析 6、Android Handler 消息機制 7、Android 消息機制 … 二、關(guān)于

    2024年03月11日
    瀏覽(102)
  • 助你加速開發(fā)效率!告別IDEA卡頓困擾的性能優(yōu)化技巧

    助你加速開發(fā)效率!告別IDEA卡頓困擾的性能優(yōu)化技巧

    在現(xiàn)代軟件開發(fā)中,IDE(集成開發(fā)環(huán)境)是一個必不可少的工具。IntelliJ IDEA是一個廣受歡迎的IDE,但有時候IDE的性能可能會受到影響,導(dǎo)致開發(fā)人員的工作效率降低。本文將介紹一些可以提高IDE性能的技巧,幫助開發(fā)人員消除卡頓困擾。 優(yōu)化IDE的配置 在IDEA中,可以通過修改

    2024年01月25日
    瀏覽(93)
  • Rust 性能優(yōu)化 : Rust 性能優(yōu)化技巧,提升 Rust 程序的執(zhí)行效率和資源利用率 The Rust Performance

    作者:禪與計算機程序設(shè)計藝術(shù) 在過去的幾年中,隨著編程語言的快速發(fā)展,編程人員已經(jīng)逐漸從依賴編譯型語言轉(zhuǎn)向了使用解釋型語言。相對于編譯型語言來說,解釋型語言具有更快的執(zhí)行速度,在某些情況下甚至可以實現(xiàn)接近編譯器的運行時效率。但是另一方面,這些語

    2024年02月07日
    瀏覽(303)
  • JVM逃逸分析原理解析:優(yōu)化Java程序性能和內(nèi)存利用效率

    在Java開發(fā)中,性能和內(nèi)存利用效率一直是開發(fā)者關(guān)注的焦點。為了提高Java程序的執(zhí)行效率,JVM引入了逃逸分析技術(shù)。本文將詳細解析JVM逃逸分析的原理,幫助讀者深入理解其工作機制。 逃逸分析是一種用于確定對象在方法的生命周期內(nèi)是否逃逸出方法外部范圍的技術(shù)。在

    2024年01月20日
    瀏覽(87)
  • C++中vector和數(shù)組之間的轉(zhuǎn)換及其效率問題

    C++中vector和數(shù)組之間的轉(zhuǎn)換及其效率問題

    因為一些原因,本人遇到需要頻繁把vector與數(shù)組之間轉(zhuǎn)換的情況,于是就分析了一下兩個之間轉(zhuǎn)換的實施以及相關(guān)的效率問題。 眾所周知,一維vector中的元素存儲是順序連續(xù)的,所以我們可以通過訪問第一個元素的地址以及元素的數(shù)量來訪問一系列的元素。因此,我們可以采

    2023年04月09日
    瀏覽(19)
  • C#正則表達式性能優(yōu)化:[0-9] vs. \d,輕松提升匹配效率

    C#正則表達式性能優(yōu)化:[0-9] vs. \d,輕松提升匹配效率

    ? 概述: 在C#中,正則表達式`d`相對于`[0-9]`可能效率稍低,因為`d`包含更廣泛的Unicode數(shù)字字符。為提高性能,可使用`[0-9]`并結(jié)合編譯優(yōu)化。以下示例演示性能測試及優(yōu)化,適用于提高正則表達式匹配效率的場景。 在C#中,正則表達式 d 涵蓋更廣泛的 Unicode 數(shù)字字符范圍,

    2024年04月11日
    瀏覽(100)
  • 使用Elasticsearch進行數(shù)據(jù)類型轉(zhuǎn)換優(yōu)化

    在本文中,我們將探討如何使用Elasticsearch進行數(shù)據(jù)類型轉(zhuǎn)換優(yōu)化。Elasticsearch是一個強大的搜索和分析引擎,它可以處理大量數(shù)據(jù)并提供實時搜索功能。然而,在處理數(shù)據(jù)時,我們可能需要對數(shù)據(jù)類型進行轉(zhuǎn)換,以便更有效地存儲和查詢數(shù)據(jù)。 Elasticsearch是一個基于Lucene的搜索

    2024年02月21日
    瀏覽(21)
  • 我的C++奇跡之旅:值和引用的本質(zhì)效率與性能比較

    我的C++奇跡之旅:值和引用的本質(zhì)效率與性能比較

    引用 不是新定義一個變量,而是給 已存在變量取了一個別名 ,編譯器不會為引用變量開辟內(nèi)存空間,它和它引用的變量共用同一塊內(nèi)存空間。 定義: 類型引用變量名(對象名) = 引用實體; 例如以下代碼,在變量名前加一個 ,意思是一個引用類型, b 是 a 的別名,也就是

    2024年04月27日
    瀏覽(18)
  • React【性能優(yōu)化_shouldComponentUpdate、性能優(yōu)化_時間分片、性能優(yōu)化_虛擬列表、PropTypes 進行類型檢查、默認 Prop 值、 TypeScript】(六)

    React【性能優(yōu)化_shouldComponentUpdate、性能優(yōu)化_時間分片、性能優(yōu)化_虛擬列表、PropTypes 進行類型檢查、默認 Prop 值、 TypeScript】(六)

    目錄 性能優(yōu)化_shouldComponentUpdate 性能優(yōu)化_時間分片 性能優(yōu)化_虛擬列表

    2024年02月08日
    瀏覽(28)
  • 『C++』C++的類型轉(zhuǎn)換

    『C++』C++的類型轉(zhuǎn)換

    「前言」 文章是關(guān)于C++特殊類型轉(zhuǎn)換 「歸屬專欄」 C嘎嘎 「筆者」 楓葉先生(fy) 「座右銘」 前行路上修真我 「楓葉先生有點文青病」 「每篇一句」 有些事不是看到了希望才去堅持, 而是因為堅持才會看到希望。 ——《十宗罪》 目錄 一、C語言中的類型轉(zhuǎn)換 二、為什么

    2024年02月04日
    瀏覽(18)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包