2011-09-11 77 views
3

什麼是 '基地' 在JNA的在JNA的Pointer.getPointerArray(long base)和Pointer.getStringArray(long base)中,'base'是什麼意思?

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

是什麼意思?

JNA Documentation for Pointer沒有解釋這應該指的是什麼'基礎'。

如果它是一個文本格式的基礎,那麼爲什麼它也傳遞給getPointerArray呢?

是否可以指內存地址的位數?爲什麼它需要通過這樣的事情(如果在Java內部,它不知道它本身,如果不是我怎麼能?)

如果是地址寬度,爲什麼使用長?爲未來做準備? JNA項目是否預見到一臺擁有1E19位寬內存地址總線的大型機器?

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

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

它應該是一個抵消?

難道是數組終止符?如果我的終止字符超過64位呢?如果小於64位呢?

回答

1

通過JNA的源指針類挖,

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

...顯然指「基地」中的base+address memory addressing modes在彙編器/硬件級中發現的上下文,其中一個寄存器將存儲的存儲器地址,而第二個寄存器將存儲該地址的偏移量,該值在存儲器訪問期間自動求和。理想情況下,指針將是'基地址',當您遍歷內存的內容時,您將調整'偏移'地址。

所以基本上「基地」的意思是「偏移」在這方面:它開始於「基礎」指針的位置後字節,然後吐出基於它從內存這些部分,直到讀出的地址位置的指針/字符串對象它找到一個空值。我推測使用「base」這個詞的原因與該方法是如何在內部進行編碼有關:

它創建基於自身的第二個Pointer對象,但將'base'參數作爲'offset'傳遞,然後創建一個名爲'offset'的索引變量......是的。然後迭代,通過以字節爲單位的地址字大小(通常爲8)遞增「偏移量」,直到它讀取一個空值。

因此,因爲'偏移'已被用作局部變量,它將與偏移參數衝突,因此編碼器將該方法的偏移參數命名爲'base'。

相關問題