第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用 JNI 將數(shù)據(jù)從 Java 復制到 C++ 對象數(shù)組

使用 JNI 將數(shù)據(jù)從 Java 復制到 C++ 對象數(shù)組

慕標琳琳 2022-06-23 19:27:22
我有需要大量計算的 Java 代碼,我想使用 JNI 將其轉(zhuǎn)發(fā)到 C++ 中。我主要關心的是在內(nèi)存中序列化所有數(shù)據(jù),然后將計算轉(zhuǎn)發(fā)到 GPU。由于數(shù)據(jù)是用 Java 接收的,但主要計算是使用 C++ 完成的,所以我想將所有數(shù)據(jù)連續(xù)排列在一個原始數(shù)組(ByteBuffer或來自 的原始字節(jié)Unsafe)中,與 C++ 對象具有相同的結構。例如,假設我對xand有一個觀點y。在 C++ 中,對象的大小為 24 字節(jié)。8 個字節(jié)(我猜)VTable,8 個字節(jié)x和 8 個字節(jié)y。所以在 Java 中,我會將所有數(shù)據(jù)排列在同一個結構中,并使用 JNI 將緩沖區(qū)傳遞給 C++,然后在 C++ 中將其轉(zhuǎn)換為點數(shù)組。這很好用,我允許自己假設我將始終使用相同的 C++ 編譯器、相同的 JDK、相同的操作系統(tǒng)和相同的硬件(至少用于測試解決方案的可行性)。我的問題是這些假設是否正確,或者有更好的方法在 Java 和 C++ 之間傳遞序列化數(shù)據(jù)(我必須使用 JNI 而不是某種 IPC)?
查看完整描述

1 回答

?
慕碼人8056858

TA貢獻1803條經(jīng)驗 獲得超6個贊

如果我可以依賴 C++ 結構(偏移量、字段對齊等)

不,除非您知道您的特定平臺上的編譯器在這種情況下會做什么。它產(chǎn)生未定義的行為。

ByteBuffer在慣用的 C 中,將(aka char *)的內(nèi)容與Point *以后訪問其成員的內(nèi)容混為一談是不可能的??纯?C 標準 N1570 6.5 (p7)

對象的存儲值只能由具有以下類型之一的左值表達式訪問:88)

— 與對象的有效類型兼容的類型,

假設您知道void *返回的GetDirectBufferAddress本身是由調(diào)用malloc(size)或朋友(它實際上使用malloc)返回的,size_t size = sizeof(struct Point)那么您可以將其強制轉(zhuǎn)換為從本機代碼Point *初始化其成員并稍后使用它。那將是一種一致的方式(之一)。


查看完整回答
反對 回復 2022-06-23
  • 1 回答
  • 0 關注
  • 170 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號