2
我正在使用JNI(使用本機代碼爲Android開發)。將指針長度加長
這種情況是我想發送給Java類的一個指向Native對象的指針。爲此,我已經看到在將指針方向投入一長段,如下所示:
long pointerDirection = (long)pointer;
這種安全嗎?我讀過一些體系結構,「長」只有32位,但指針只需要32位,對吧?或者在64位他們也使用64位?
感謝
我正在使用JNI(使用本機代碼爲Android開發)。將指針長度加長
這種情況是我想發送給Java類的一個指向Native對象的指針。爲此,我已經看到在將指針方向投入一長段,如下所示:
long pointerDirection = (long)pointer;
這種安全嗎?我讀過一些體系結構,「長」只有32位,但指針只需要32位,對吧?或者在64位他們也使用64位?
感謝
這是安全的?
不,絕對不是 - 標準沒有這樣的保證(即使它可能在許多機器上實際工作)。
您可以將其安全地(僅)轉換爲整數類型ptrdiff_t
。
然後'ptrdiff_t'怎麼會傳給Java ?.如果他想傳遞指向Java的指針,他可以'reinterpret_cast'到'jlong' – msam
如果您擔心類型的寬度可能會發生變化,爲什麼不選擇固定寬度類型,比如'uint64_t',並且如果您希望本機指針類型只用於'intptr_t'。 – luk32