我有一個執行WMI查詢的程序,然後將數據轉換回到陸地數據結構(使用方法here)。每隔一段時間,go的GC就會出現,並將一些看起來隨機的內存部分燒燬到0
s,從而導致可怕的破壞。go的COM調用通過GC收集其數據,調零使用的內存
我想弄清楚究竟是什麼導致了這個問題,我相信下一步是瞭解COM調用過程中會發生什麼。我現在的理解是:
- 呼叫與WMI查詢COM從過程
- 操作系統執行查詢,並將結果寫入到由過程
- 該位置從返回擁有一些內存位置COM電話,然後我可以訪問和序列化
這是關於發生了什麼? Windows如何選擇該內存位置,使其不覆蓋現有數據?
COM對象通常分配在堆上。之後,他們被引用計數。該位置由正常的運行時堆選擇。 –
通常情況下,對象不會被GC'd(並覆蓋),直到它們不再被代碼引用。那裏有一些參考計數問題。 – sharptooth
現在似乎是一個問題,因爲不像你們中的一些人所建議的那樣圍繞從COM返回的對象指針。我已經用最新的研究更新了github問題:https://github.com/mattn/go-ole/issues/13#issuecomment-36314577 – mjibson