我開發的音頻插件適用於Windows和Mac(VST和AU),和我碰到的,只有在插件在64位主機DAW打開(在我的情況收割時出現問題)在OSX 10.8中。爲什麼在64位應用程序中運行的32位插件而不是在32位應用程序中,內存分配/釋放會失敗?
插件是通用二進制構建和工作在32位主機的罰款,但在收割64位打開它導致其對分配過濾器對象隨機新/刪除指令崩潰。我試圖將它作爲一個64位插件來測試,但同樣的事情發生了。
什麼會導致這種情況發生?
編輯:這裏是崩潰報告的屏幕截圖:
我開發的音頻插件適用於Windows和Mac(VST和AU),和我碰到的,只有在插件在64位主機DAW打開(在我的情況收割時出現問題)在OSX 10.8中。爲什麼在64位應用程序中運行的32位插件而不是在32位應用程序中,內存分配/釋放會失敗?
插件是通用二進制構建和工作在32位主機的罰款,但在收割64位打開它導致其對分配過濾器對象隨機新/刪除指令崩潰。我試圖將它作爲一個64位插件來測試,但同樣的事情發生了。
什麼會導致這種情況發生?
編輯:這裏是崩潰報告的屏幕截圖:
我發現這個問題使用的是64位主機時導致隨機內存錯誤。有一個memset函數引用指向float的指針的大小來清除它的內容。當然,在64位主機上,指針大小爲64位,所以memset函數損壞了堆,導致了不穩定的內存錯誤。
這是memset的功能:
float *z;
//...
memset(z, 0, sizeof(z)*size);
意圖是應該ž最終宣佈了一倍,這將是在此功能自動調整分配的內存塊。我忽略了在64位環境中會發生什麼。
sizeof應該在32位和64位工作...不知道問題是什麼。 –
但它是一個指針的大小。無論指針被聲明爲指向浮點,指針「地址」的大小在32位系統中都是32位,而在64位系統中是64位,即使指向的變量大小爲32位。 – Chris
哦..對不起,錯過了 –
我從字面上剛剛發佈完全相同的問題[這裏](http://stackoverflow.com/questions/14309065/64-bit-build-in-osx-inconsistant-malloc-error) 讓我知道,如果你找到答案,我也會這樣做。 –
我猜想32/64位問題是一個紅鯡魚。您的程序中可能還有其他一些內存錯誤,這些錯誤會擾亂內存分配器的內部狀態,但由於某種原因,它只能在您的64位主機上輕鬆顯示。內存錯誤可能會非常棘手。 – jjlin