簡體   English   中英

在JNA的Pointer.getPointerArray(長基數)和Pointer.getStringArray(長基數)中,“基數”是什么意思?

[英]What does 'base' mean in JNA's Pointer.getPointerArray(long base) and Pointer.getStringArray(long base)?

“基礎”在JNA中意味着什么

Pointer.getPointerArray(long base) 
Pointer.getStringArray(long base)

指針JNA文檔沒有解釋這應該引用的“基礎”。

如果它是文本格式化基礎,那么為什么它也傳遞給getPointerArray呢?

它可以指內存地址的位數嗎? 為什么它需要這樣的東西傳遞(如果在java中,它不能自己解決這個問題,如果不是,我怎么能?)

如果是地址寬度,為什么要使用多長? 為未來做准備? JNA項目是否預見到具有1E19位寬的存儲器地址總線的大型機器?

它應該是一個長的所有位設置為1?

它可以指主機的硬件基礎嗎? 對於二進制文件,這可能不是2嗎?

它應該是一個偏移嗎?

它可能是數組終止字符嗎? 如果我的終止字符超過64位怎么辦? 如果小於64位怎么辦?

挖掘JNA的Pointer類源代碼,

Pointer.getPointerArray(long base)
Pointer.getStringArray(long base)

...顯然在匯編器/硬件級別的基址+地址存儲器尋址模式的上下文中引用'base',其中一個寄存器將存儲存儲器地址,而第二個寄存器將存儲該地址的偏移量,該地址自動求和在內存訪問期間。 理想情況下,指針將是“基地址”,當您迭代內存的內容時,您將調整“偏移”地址。

所以基本上'base'在這個上下文中意味着'offset' :它從指針位置后的'base'字節開始,然后根據它從內存的這些部分讀取的地址位置吐出Pointer / String對象,直到找到空值。 我推測為什么使用'base'這個詞與內部編碼方法的原因有關:

它根據自身創建第二個Pointer對象,但將'base'參數作為'offset'傳遞,然后創建一個名為'offset'的索引變量...是的。 然后它迭代,以地址字大小(通常為8)遞增'offset',直到它讀取空值。

因為'offset'已經被用作局部變量,它將與offset參數沖突,因此編碼器將方法的偏移參數命名為“base”。

暫無
暫無

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

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