簡體   English   中英

使用32位模式下的指針值使用64位uint嗎?

[英]Using a 64bit uint for pointer values in 32bit mode?

我正在實現一種基於C的編程語言,並且我想實現一種編譯模式,該編譯模式與以32位或64位模式運行無關。 我所有的數據類型都有明確的寬度,因此二進制兼容性沒有問題,唯一有問題的方面是指針。

那么,即使在32位模式下我仍然要使用顯式的64位指針實現該怎么辦? IIRC幾乎所有內存控制器都至少為64位,因此讀寫仍將是一個周期,但是整數算術呢?

除了增加內存占用之外,這種方法是否還有潛在的缺點? 還有其他潛在警告嗎?

編輯:讓我澄清情況的上下文-最初的問題有點小。 我需要“二進制不可知模式”來使解釋程序字節碼能夠動態橋接不同的本機二進制文件。 自然地,在32位二進制文​​件中使用64位二進制文​​件中的指針幾乎沒有意義,但是指針的寬度會影響其他數據位置的偏移量,這是主要要交換的內容。 簡而言之,這個想法如下:為了使數據結構二進制與32位和64位二進制文​​件兼容,浪費了一點空間。

您可以使用uintptr_t類型。

它是一個unsigned int ,它保證與指針的大小相同。

它的定義在C ++ 11和C99中是標准的(使用<stdint.h>頭文件)。

如果希望指針始終為64位,則可以使用uint64_t 但是,這在具有128位指針的系統上是不安全的。

在所有32位計算機上並不是64位訪問是原子的。 對於算術,典型的32位計算機沒有64位算術單元,因此編譯器使用在32位算術單元之上構建的運行時支持功能來實現64位算術。

我想如果您確實在64位數據類型中保留了32位指針,那么您將忽略一半的位。 在32位模式下運行時,您將在64位指針上執行32位操作。 當只有32位有意義時,執行64位操作毫無意義。 在這種情況下,您只有32位類型,存儲在64位插槽中,而浪費了一半的位。

有鑒於此,您的描述對我而言似乎毫無意義。 在我看來,您已經決定希望所有數據類型都具有相同的大小,而不管您使用的是32位還是64位。 對於某些數據類型,這可能是理想的目標,但對於指針卻並非如此。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM