簡體   English   中英

為什么malloc不歸?

[英]Why does malloc not return?

我有一個運行的線程(OS X 10.10.5)與此堆棧跟蹤掛起。 這是在大約20個小時的操作之后,可能與低內存條件有關。 但是,問題是,為什么malloc不返回null? 為什么線程的執行需要停止? 請求的實際字節數很小(對於路徑上的字符串操作)。

std::wstring finalPath = itsPath.substr(0,ls+1);

  1   operator new(unsigned long) + 37 (libc++abi.dylib + 124485) [0xa0339645] 2
   1   malloc + 29 (libsystem_malloc.dylib + 3997) [0xa1829f9d] 2
    1   malloc_zone_malloc + 116 (libsystem_malloc.dylib + 7243) [0xa182ac4b] 2
     1   default_zone_malloc + 3 (libsystem_malloc.dylib + 67909) [0xa1839945] 2
     *1   thread_exception_return + 0 (kernel + 632362) [0xffffff800029a62a] (runnable) 2

失敗的操作的目的是清除臨時目錄,以便引導磁盤不會填滿程序生成的臨時文件。 此過程失敗,磁盤確實填滿,線程停止(如實際停止,並且主線程連接到它),並且從磁盤刪除文件的過程停止。 此外,由於線程已停止,因此必須終止該進程。 我不知道你是否可以把它稱為一個bug,因為失敗的過程是試圖阻止實際發生的事情。

感謝您的見解。

你提到磁盤已滿,所以內核可能正試圖將內存換成磁盤而失敗。 在這種情況下,macOS暫停,而不是殺死失控過程。 這個想法是你釋放一些空間和/或關閉其他一些應用程序,然后恢復暫停的過程,例如使用kill -CONT <PID>

聽到它的聲音,真正的問題是你分配了太多的內存,或者泄漏了內存。

暫無
暫無

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

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