跳轉到內容

Ada 程式設計/屬性/'Ref

來自華夏公益教科書,自由的教科書

’REF 表示分配給物件的首個儲存單元的有效地址。’REF 不支援包、任務單元或條目。此屬性的兩種形式是 X’REF 和 SYSTEM.ADDRESS’REF(N)。僅在機器程式碼過程中使用 X’REF。在任何地方使用 SYSTEM.ADDRESS’REF(N) 將整數表示式轉換為地址。

此屬性生成對應用於其的實體的引用。在 X’REF 中,X 必須是常量、變數、過程、函式或標號。此屬性返回 MACHINE_CODE.OPERAND 型別的返回值。僅用它來指定程式碼語句中的運算元。在程式碼語句生成的指令之前,新增為簡化引用所需的額外指令,例如載入基址暫存器。如果過程的宣告部分包含 pragma IMPLICIT_CODE (OFF),則如果需要額外程式碼,會生成警告。

SYSTEM.ADDRESS’REF(N)

[編輯 | 編輯原始碼]

此屬性的效果類似於從整數到地址的無檢查轉換的效果。但是,在以下列出的情況下,請使用 SYSTEM.ADDRESS’REF(N) 而不是無檢查轉換。在這些情況下,N 必須是靜態的。在 SYSTEM.ADDRESS’REF(N) 中,SYSTEM.ADDRESS 必須是型別 SYSTEM.ADDRESS。N 必須是 UNIVERSAL_INTEGER 型別的表示式。此屬性返回 SYSTEM.ADDRESS 型別的返回值,該值表示由 N 指定的地址。

  • 對於任何執行時配置包:在地址子句中使用無檢查轉換需要生成詳細說明程式碼,但配置包不會詳細說明。
  • 在 N 大於 INTEGER’LAST 的任何例項中:在引用記憶體上半部分的地址子句中需要此類值。要在這些情況下使用無檢查轉換,需要將表示式指定為負整數。
  • 要將物件放置在地址處,請使用 ’REF。

在以下示例中,integer_value 轉換為地址,以便在地址表示子句中使用。此形式避免了 UNCHECKED_CONVERSION,並且對於 32 位無符號地址很有用。

--place an object at an address
for object use at ADDRESSREF (integer_value)
--to use unsigned addresses
for VECTOR use at SYSTEM.ADDRESSREF(16#808000d0#);
TOP_OF_MEMORY : SYSTEM.ADDRESS := SYSTEM.ADDRESSREF(16#FFFFFFFF#);
華夏公益教科書