[英]What C++ type use for fastest “for cycles”?
我認為此網站上尚未答復。
我編寫了一個經過4個數字的許多組合的代碼。 數字值從0到51,所以它們可以以6位存儲,所以在1個字節中,對嗎? 我將這4個數字嵌套用於循環,然后在最低級別將其用於循環。 那么,從至少可以存儲52個值的c ++類型中,迭代4個嵌套循環的最快速度是什么?
The code looks like:
for(type first = 0; first != 49; ++first)
for(type second = first+1; second != 50; ++second)
for(type third = second+1; third != 51; ++third)
for(type fourth = third+1; fourth != 52; ++fourth) {
//using those values for about 1 bilion bit operations made in another for cycles
}
該代碼非常簡化,也許還有更好的方法可以進行這種迭代,您也可以幫助我。
使用標題<cstdint>
的typedef std::uint_fast8_t
。 它應該是至少有8位的“最快”無符號整數類型。
最快的速度是底層處理器ALU可以與之配合使用的一切。 現在,寄存器可以以多種格式尋址。 在那種情況下,所有這些格式都同樣快。
因此,這變得非常特定於處理器體系結構,而不是特定於C ++。 如果您正在使用現代PC處理器,則for循環的int速度與其他任何方法一樣快。
在嵌入式系統上,還有更多需要考慮的事情。 例如。 變量是否存儲在對齊的位置?
在大多數計算機上, int
是最快的整數類型。 在我使用的所有計算機上, int
都比unsigned
快,大大快於signed char
。
另一個問題,也許是更大的問題,是您在處理這些數字。 您沒有顯示代碼,所以沒有辦法。 如果期望first*second
產生期望的整數值,請使用int
。
另一個問題是您期望此代碼具有多大的可移植性。 將移植到許多不同體系結構,不同編譯器的代碼與將在受限和受控設置中使用的代碼之間存在巨大區別。 如果是后者,請編寫一些基准,並使用基准性能最佳的類型。 如果您要編寫一些廣泛使用的書,問題會更加棘手。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.