2017-03-14 20 views
1

在x86系統上,通常是32位字。在x86_64上,它是64位。這個值如何被用來有條件地編譯代碼?如何在Rust中有條件地編譯目標字大小的代碼?

該參考文獻列出了#[cfg()]公開的數字屬性,但文字大小似乎不是其中的一個。

+1

我不認爲可以查詢「字」大小,因爲它在語義上沒有意義。如果你解釋一下你打算用這個尺寸來檢查,那會更容易:你在尋找指針大小嗎?原子大小?別的東西? –

+0

@MatthieuM。這對於系統語言來說是不好的推理。至於這個原因,就是爲每個拱的一組數學計算選擇最優算法和無符號整數類型。而且,我沒有看到我的具體目標與我在這裏問過的一個普遍問題有什麼關係。 – Doe

+0

恐怕你不明白現代建築是如何工作的,它的工作比「銀彈」字大小複雜。例如,可以同時處理u32和u64操作的64位處理器在64位操作上可以更快,但是可以在單個週期內執行更多32位操作,而u32可以適用於單個緩存行爲u64。因此,不管是使用u32還是u64來獲得更好的速度都不像查詢「一個字的大小」那麼簡單......不再是那麼簡單。這就是爲什麼我說「一個字的大小」一般不再有意義。 –

回答

3

根據the conditional compilation docs,您可以使用以下選項之一來接近您要查找的內容。

target_pointer_width = "..." 

target_has_atomic = "..." // one of "8", "16", "32", "64" and "ptr". 
+0

'target_has_atomic'實際上等同於我正在查找的內容。我使用的是鏽1.9,沒有列出這個屬性。 – Doe

相關問題