[問題] 開thread的記憶體需求該如何減少?

作者: kingofsdtw (不能閒下來!!)   2022-09-14 03:53:33
首先有個lib 高達4MB
lib中全是靜態buffer宣告
主程式和單一thread 共占用了4.1MB
觀察了一下當thread開到第10個時候暴增到40MB左右
該如何設計才能避免 每個thread自行複製一份lib function? 或稱為各自有靜態大buffer.
.
ps.
過去我也以為function是絕對記憶體位置和大小
不會因為thread增加而記憶體用量變大...
還是實驗方法錯誤了?
作者: Schottky (順風相送)   2022-09-14 04:10:00
是 stack 吧
作者: b0920075 (Void)   2022-09-14 06:10:00
首先你要先確定你的程式真的有複製 lib function 和你所謂的靜態 buffer ,一般來說這兩個東西應該是 thread會共享的,不會你開一個 thread 就複製一份再來, thread 有各自的 stack ,而 stack 一般來說一次就會分配很多空間省的你一直跟系統要,所以記憶體越吃越多很正常
作者: wulouise (在線上!=在電腦前)   2022-09-14 22:08:00
靜態buffer是static char*[]?這怎會跟thread一起長大...你所謂的開到第十個thread爆增,是fork還是std::thread?
作者: kingofsdtw (不能閒下來!!)   2022-09-15 00:33:00
char buffer[1024] 沒mutex我在研究看看...記憶體爆了感謝大家
作者: Lipraxde (Lipraxde)   2022-09-15 00:49:00
只有開到十個 thread 的時候會爆?
作者: Schottky (順風相送)   2022-09-15 03:13:00
所以這沒加 static,你要確認一下是 global 還是 locallocal 不是靜態記憶體,它是存在 stack 的.....
作者: enthos (影斯作業系統)   2022-09-15 03:29:00
radare2/pwndbg/GEF/peda/Pwngdb 看最後一個github圖
作者: wulouise (在線上!=在電腦前)   2022-09-15 19:02:00
你把測試code貼出來才好討論吧,靜態長度要看放哪

Links booklink

Contact Us: admin [ a t ] ucptt.com