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