記憶體配置規則的摘要
下表摘要說明有關記憶體配置的重要規則。
MIDL 元素 | 描述 |
---|---|
最上層 [ ref] 指標 | 必須是非 Null 指標。 |
函式傳回值 | 新的記憶體一律會配置給指標傳回值。 |
[ 唯一、out] 或 [ ptr, out] 指標 | MIDL 不允許。 |
非最上層 [唯一、、out] 或 [ptr, in, out] 指標,從 null 變更為非 Null | 用戶端存根會在傳回時在用戶端上配置新的記憶體。 |
非最上層 [唯一,,out] 指標,從非 null 變更為 null | 用戶端上的記憶體被遺棄;用戶端應用程式負責釋放記憶體並防止外洩。 |
非最上層 [ptr, , out] 指標,從非 Null 變更為 null | 如果客戶端上沒有別名,記憶體將會被遺棄;用戶端應用程式負責釋放並防止在此情況下發生記憶體流失。 |
[ref] 指標 | 用戶端應用程式層通常會配置。 |
非 null [in, out] 指標 | 存根嘗試寫入用戶端上的現有記憶體。 如果 [string] 且大小增加超過用戶端配置的大小,則會導致 GP 錯誤傳回。 |
下表摘要說明金鑰 IDL 和 ACF 屬性對記憶體管理的影響。
MIDL 功能 | 客戶端問題 | 伺服器問題 |
---|---|---|
[ 配置(single_node)], [allocate(all_nodes)] | 判斷是否對記憶體函式進行一或多個呼叫。 | 與用戶端相同,除了私人記憶體,通常可用於配置 (single_node) 和 [in,out] 數據。 |
[allocate(free)] 或 [allocate(dont_free)] | (無;影響伺服器。) | 判斷伺服器上的記憶體是否在每個遠端過程調用之後釋放。 |
陣列屬性 [ max_is] 和 [ size_is] | (無;影響伺服器。) | 決定要配置的記憶體大小。 |
[ byte_count] | 用戶端必須配置緩衝區;用戶端存根未配置或釋放。 | ACF 參數屬性會決定伺服器上配置的緩衝區大小。 |
[ enable_allocate] | 通常,沒有。 不過,用戶端可能會使用不同的記憶體管理環境。 | 伺服器使用不同的記憶體管理環境。 RpcSmAllocate 應該用於配置。 |
[ ]attribute 中的 | 負責配置數據的記憶體的用戶端應用程式。 | 依存根在伺服器上配置。 |
[ out] 屬性 | 依存根在用戶端上配置。 | [out]-only 指標必須是 [ref] 指標;依存根配置於伺服器上。 |
[ ref] 屬性 | 指標所參考的記憶體必須由用戶端應用程式配置。 | 存根所管理的最上層和第一層參考指標。 |
[ 唯一] 屬性 | 非 Null 到 null 可能會導致孤立的記憶體;null 到非 Null 會導致用戶端存根呼叫 midl_user_allocate。 | (影響用戶端。 |
[ ptr] 屬性 | (請參閱 [ 唯一]。 | (請參閱 [ 唯一]。 |