[英]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)
?
如果它是文本格式化基礎,那么為什么它也傳遞給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.