volatile
似乎是每個人永無止境的問題。我想我知道它的一切,但後來我遇到這樣的:釋放(vfree-ing)指向易失性數據的指針
所以,我有一塊線程之間共享內存和我定義它是這樣的:
volatile type *name;
如果它讓你感覺更好,你可以想象type
只是一個int
。
這意味着我有一個指針(即不易變)的一些數據是易變的。因此,例如,當涉及到優化時,編譯器可以緩存name
的值,但不會緩存name[0]
。我對嗎?
所以,現在我vfree
荷蘭國際集團這個指針(這是一個Linux內核模塊),它告訴我,vfree
預計const void *
當我路過它volatile type *
。
我明白如何通過volatile type *
作爲type *
是危險的,因爲在該函數中,name[i]
的值可能會被緩存(作爲優化的結果),這是不可取的。
我不明白爲什麼,vfree
希望我發送一個指向非易失性數據的指針。有什麼我在那裏失蹤?還是隻是寫了vfree
的人沒有想到這種情況?
我假設我簡單地將我的指針投射到void *
不會造成任何傷害,是嗎?
嗯,但爲什麼'vfree'不接受'volatile type *'?你認爲編寫這些代碼的人是否忘記了這個問題,或者這對他們來說真的很重要? – Shahbaz
我想我在這裏同意Mircea。 'free()'不應該在乎數據是否是不穩定的。如果你使用'volatile'是因爲它是任務之間的共享內存,那麼你最好在你釋放它之前確保沒有人使用它,然後你沒有什麼可擔心的。如果你使用volatile,因爲它是內存映射的I/O,那麼我不確定你爲什麼要釋放。 'vfree'函數不需要'volatile void *',因爲'vmalloc'中的「v」代表「虛擬」,而不是「volatile」。 –
@Shahbaz:如果您分配的內存包含易失性數據,那麼這些開發人員無關緊要。 vfree()函數只需要一個指向該內存的指針。開發者沒有忘記任何東西。 – Mircea