簡體   English   中英

Mac OS X中的fsevents watcher中的內存泄漏

[英]Memory Leak in fsevents watcher in Mac OS X

我需要Mac OS X中的文件系統通知,而且我正在從/ dev / fsevents中讀取內容。 在Mac OS X中捕獲fsevent的示例代碼: http : //www.codecollector.net/view/1066/raw_fsevents 在此代碼中,您可以看到從/ dev / fsevents讀取的緩沖區一被讀取就被處理。 但是當我這樣做時,由於在處理中創建的延遲而導致事件丟失。 因此,我創建了一個新的char指針,並從/ dev / fsevents中讀取了緩沖區,並將新的char *添加到隊列中,並在新線程中處理了該隊列。 但是當我像在'print_event'和'dump_entry'中那樣處理char *時,char *指針變為實數,並且當我在處理后檢查strlen()時,它只說0或1個字節的長度。 因此在處理期間,內存正在泄漏。

任何想法如何刪除分配的char *,這將泄漏更多事件的更多內存。 請分享您對此的想法。 提前致謝。

只是好奇:您是出於某種原因手動處理/ dev / fsevents而不是使用為與其交互而設計的FSEvents接口(至少在最常見的情況下)? / dev / fsevents直接交談非常棘手。 Ars Technica做的很好。

對於這種代碼,我將擺脫malloc和memcpy。 這將增加隊列管理的大量開銷。 而且我將擺脫手動線程管理。 這正是GCD旨在處理的問題,尤其是使用dispatch_data時。 它允許您創建不可變的內存塊,無需復制即可進行處理和操作。 您可以使dispatch_source讀取/ dev / fsevents並將其傳遞回dispatch_data對象。 有關示例,請參見《並發編程指南》中的從描述符讀取數據部分。

還不清楚“ char *指針變為實數”的含義。 您是說要在兩個沒有鎖的線程上修改同一個變量嗎?

但是除非您真的需要原始訪問權限,否則我將查看FSEvents接口。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM